{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1\n",
      "Test Loss: 2.3238, Test Accuracy: 0.0938\n",
      "Epoch 2\n",
      "Test Loss: 2.3131, Test Accuracy: 0.0938\n",
      "Epoch 3\n",
      "Test Loss: 2.3024, Test Accuracy: 0.1094\n",
      "Epoch 4\n",
      "Test Loss: 2.2917, Test Accuracy: 0.1562\n",
      "Epoch 5\n",
      "Test Loss: 2.2811, Test Accuracy: 0.1875\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "import torch.utils.data\n",
    "import torch.cuda\n",
    "\n",
    "# 检查GPU是否可用\n",
    "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
    "\n",
    "# 定义模型\n",
    "class Model(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(Model, self).__init__()\n",
    "        self.flatten = nn.Flatten()\n",
    "        self.linear_relu_stack = nn.Sequential(\n",
    "            nn.Linear(28*28, 512),\n",
    "            nn.ReLU(),\n",
    "            nn.Linear(512, 512),\n",
    "            nn.ReLU(),\n",
    "            nn.Linear(512, 10)\n",
    "        )\n",
    "\n",
    "    def forward(self, x):\n",
    "        x = self.flatten(x)\n",
    "        logits = self.linear_relu_stack(x)\n",
    "        return logits\n",
    "\n",
    "# 初始化模型和优化器\n",
    "model = Model().to(device)\n",
    "optimizer = optim.SGD(model.parameters(), lr=1e-3)\n",
    "\n",
    "# 定义数据\n",
    "batch_size = 64\n",
    "train_data = torch.randn(64, 28, 28).to(device)\n",
    "train_dataloader = torch.utils.data.DataLoader(train_data, batch_size=batch_size)\n",
    "test_data = torch.randn(64, 28, 28).to(device)\n",
    "test_dataloader = torch.utils.data.DataLoader(test_data, batch_size=batch_size)\n",
    "\n",
    "# 定义损失函数\n",
    "loss_fn = nn.CrossEntropyLoss()\n",
    "\n",
    "# 定义训练函数\n",
    "def train(dataloader, model, loss_fn, optimizer):\n",
    "    model.train()\n",
    "    for batch, X in enumerate(dataloader):\n",
    "        optimizer.zero_grad()\n",
    "        X = X.view(-1, 28*28)  # 将输入数据展平\n",
    "        X = X.to(device)\n",
    "        logits = model(X)\n",
    "        loss = loss_fn(logits, torch.zeros(X.size(0), dtype=torch.long).to(device))  # 临时使用虚拟的目标标签\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "# 定义测试函数\n",
    "def test(dataloader, model, loss_fn):\n",
    "    model.eval()\n",
    "    test_loss = 0\n",
    "    correct = 0\n",
    "    with torch.no_grad():\n",
    "        for X in dataloader:\n",
    "            X = X.view(-1, 28*28)  # 将输入数据展平\n",
    "            X = X.to(device)\n",
    "            logits = model(X)\n",
    "            test_loss += loss_fn(logits, torch.zeros(X.size(0), dtype=torch.long).to(device)).item()  # 临时使用虚拟的目标标签\n",
    "            pred = logits.argmax(dim=1)\n",
    "            correct += (pred == 0).type(torch.float).sum().item()  # 临时根据虚拟标签计算准确率\n",
    "\n",
    "    test_loss /= len(dataloader)\n",
    "    correct /= len(dataloader.dataset)\n",
    "    print(f\"Test Loss: {test_loss:.4f}, Test Accuracy: {correct:.4f}\")\n",
    "\n",
    "# 训练模型\n",
    "for epoch in range(5):\n",
    "    print(f\"Epoch {epoch+1}\")\n",
    "    train(train_dataloader, model, loss_fn, optimizer)\n",
    "    test(test_dataloader, model, loss_fn)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torchvision\n",
    "from torch.utils.data import DataLoader\n",
    "import matplotlib.pyplot as plt\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "import torch.optim as optim\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch._C.Generator at 0x1c9bb2ee770>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_epochs = 3\n",
    "batch_size_train = 64\n",
    "batch_size_test = 1000\n",
    "learning_rate = 0.01\n",
    "momentum = 0.5\n",
    "log_interval = 10\n",
    "random_seed = 1\n",
    "torch.manual_seed(random_seed)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_loader = torch.utils.data.DataLoader(\n",
    "    torchvision.datasets.MNIST('./data/', train=True, download=True,\n",
    "                               transform=torchvision.transforms.Compose([\n",
    "                                   torchvision.transforms.ToTensor(),\n",
    "                                   torchvision.transforms.Normalize(\n",
    "                                       (0.1307,), (0.3081,))\n",
    "                               ])),\n",
    "    batch_size=batch_size_train, shuffle=True)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_loader = torch.utils.data.DataLoader(\n",
    "    torchvision.datasets.MNIST('./data/', train=False, download=True,\n",
    "                               transform=torchvision.transforms.Compose([\n",
    "                                   torchvision.transforms.ToTensor(),\n",
    "                                   torchvision.transforms.Normalize(\n",
    "                                       (0.1307,), (0.3081,))\n",
    "                               ])),\n",
    "    batch_size=batch_size_test, shuffle=True)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([3, 9, 4, 9, 9, 0, 8, 3, 1, 2, 3, 9, 1, 3, 6, 6, 4, 4, 9, 7, 3, 7, 6, 3,\n",
      "        4, 8, 4, 6, 8, 6, 1, 1, 1, 1, 0, 0, 1, 8, 4, 0, 1, 2, 7, 9, 3, 2, 3, 8,\n",
      "        3, 2, 0, 4, 6, 6, 5, 5, 3, 0, 3, 7, 2, 4, 1, 6, 7, 5, 4, 1, 0, 8, 5, 9,\n",
      "        0, 9, 6, 1, 8, 0, 9, 3, 5, 7, 8, 5, 6, 4, 2, 2, 2, 1, 8, 4, 4, 2, 1, 5,\n",
      "        9, 3, 7, 0, 4, 1, 7, 2, 2, 6, 5, 1, 2, 6, 1, 3, 1, 2, 7, 4, 1, 3, 2, 9,\n",
      "        3, 7, 2, 7, 4, 7, 0, 0, 9, 0, 9, 5, 1, 6, 9, 8, 1, 4, 6, 7, 5, 5, 6, 4,\n",
      "        5, 4, 0, 7, 4, 1, 3, 8, 2, 6, 2, 2, 8, 4, 1, 9, 6, 7, 5, 0, 7, 4, 6, 2,\n",
      "        6, 8, 7, 9, 8, 0, 7, 4, 2, 4, 9, 0, 4, 6, 5, 6, 6, 4, 4, 8, 3, 8, 0, 9,\n",
      "        5, 6, 3, 3, 8, 4, 4, 6, 7, 8, 5, 3, 4, 3, 3, 3, 3, 1, 8, 8, 9, 1, 0, 1,\n",
      "        4, 1, 0, 2, 0, 6, 5, 1, 5, 8, 8, 1, 3, 9, 4, 5, 9, 2, 5, 6, 5, 8, 2, 7,\n",
      "        4, 1, 6, 8, 7, 9, 3, 3, 4, 4, 5, 4, 9, 8, 2, 9, 1, 6, 7, 1, 0, 5, 1, 9,\n",
      "        2, 1, 5, 2, 7, 9, 0, 0, 6, 0, 8, 7, 2, 6, 1, 7, 6, 1, 2, 1, 6, 3, 1, 4,\n",
      "        1, 7, 5, 9, 3, 8, 6, 3, 8, 7, 4, 2, 3, 2, 4, 3, 5, 1, 2, 4, 0, 9, 4, 0,\n",
      "        5, 0, 7, 3, 3, 1, 8, 4, 1, 2, 2, 6, 0, 2, 1, 6, 3, 6, 2, 1, 7, 3, 9, 9,\n",
      "        0, 7, 6, 6, 8, 0, 1, 1, 9, 9, 6, 9, 4, 7, 8, 7, 8, 5, 3, 2, 4, 4, 3, 3,\n",
      "        1, 9, 5, 3, 1, 8, 4, 7, 6, 0, 5, 9, 7, 5, 4, 0, 3, 6, 0, 0, 5, 9, 7, 4,\n",
      "        7, 7, 3, 3, 8, 0, 5, 8, 6, 3, 4, 9, 6, 2, 2, 9, 3, 9, 4, 3, 7, 8, 0, 3,\n",
      "        7, 5, 1, 7, 0, 1, 7, 1, 6, 8, 9, 0, 2, 0, 0, 2, 8, 5, 6, 2, 1, 6, 4, 2,\n",
      "        1, 0, 7, 8, 7, 9, 8, 3, 1, 5, 2, 5, 0, 3, 8, 4, 1, 8, 0, 2, 4, 4, 0, 0,\n",
      "        4, 2, 8, 7, 5, 8, 5, 3, 7, 3, 3, 3, 1, 2, 4, 5, 9, 8, 2, 7, 6, 8, 6, 1,\n",
      "        3, 4, 0, 3, 7, 0, 3, 2, 9, 6, 2, 1, 7, 8, 1, 6, 9, 8, 6, 8, 7, 0, 5, 2,\n",
      "        5, 4, 4, 8, 6, 6, 8, 6, 7, 0, 9, 4, 4, 9, 7, 5, 7, 5, 9, 0, 8, 3, 9, 8,\n",
      "        1, 3, 3, 1, 0, 0, 1, 2, 1, 7, 0, 7, 0, 9, 8, 3, 2, 2, 0, 3, 0, 3, 0, 3,\n",
      "        6, 1, 5, 8, 8, 7, 4, 5, 2, 6, 7, 8, 4, 8, 3, 9, 2, 6, 8, 7, 2, 3, 0, 4,\n",
      "        9, 7, 7, 5, 0, 3, 6, 2, 9, 5, 9, 3, 7, 3, 6, 0, 9, 6, 5, 1, 6, 3, 9, 0,\n",
      "        9, 8, 4, 1, 6, 4, 1, 9, 1, 4, 6, 9, 4, 4, 7, 2, 3, 5, 9, 9, 2, 3, 0, 9,\n",
      "        9, 0, 0, 2, 4, 5, 6, 4, 7, 9, 0, 9, 0, 8, 3, 3, 1, 6, 0, 8, 3, 9, 8, 0,\n",
      "        3, 9, 7, 4, 8, 0, 9, 9, 7, 4, 9, 0, 1, 9, 0, 3, 3, 6, 8, 2, 6, 0, 0, 8,\n",
      "        8, 7, 9, 7, 7, 6, 1, 6, 0, 1, 9, 9, 5, 6, 9, 6, 2, 2, 1, 1, 6, 0, 7, 8,\n",
      "        4, 2, 4, 7, 0, 8, 9, 5, 9, 6, 9, 1, 2, 2, 8, 1, 3, 6, 2, 0, 5, 1, 1, 6,\n",
      "        8, 7, 0, 6, 2, 5, 6, 1, 9, 8, 6, 8, 5, 1, 7, 3, 2, 0, 9, 2, 2, 5, 5, 3,\n",
      "        8, 1, 4, 9, 7, 7, 1, 8, 2, 8, 1, 1, 7, 4, 1, 6, 9, 2, 0, 3, 4, 2, 0, 5,\n",
      "        7, 5, 7, 2, 5, 6, 8, 2, 6, 7, 3, 1, 6, 2, 4, 2, 0, 2, 5, 4, 1, 1, 5, 7,\n",
      "        4, 5, 2, 0, 8, 0, 4, 7, 3, 8, 8, 2, 3, 2, 6, 5, 1, 0, 4, 1, 3, 9, 0, 2,\n",
      "        8, 9, 1, 2, 0, 8, 7, 4, 4, 0, 7, 1, 0, 8, 5, 3, 3, 3, 4, 0, 7, 4, 4, 5,\n",
      "        0, 2, 2, 7, 8, 1, 2, 8, 0, 3, 5, 4, 6, 7, 9, 0, 0, 7, 3, 9, 4, 9, 5, 1,\n",
      "        4, 4, 9, 8, 7, 3, 9, 0, 8, 7, 0, 8, 4, 5, 8, 1, 7, 4, 2, 1, 1, 5, 1, 1,\n",
      "        5, 5, 6, 4, 3, 7, 3, 3, 3, 0, 4, 7, 9, 0, 3, 9, 8, 0, 7, 8, 7, 0, 0, 3,\n",
      "        7, 7, 6, 8, 8, 9, 8, 0, 9, 4, 9, 3, 8, 6, 8, 2, 0, 4, 8, 4, 4, 4, 6, 8,\n",
      "        3, 6, 3, 5, 1, 9, 5, 4, 3, 8, 3, 1, 2, 3, 1, 1, 9, 9, 5, 5, 0, 4, 1, 6,\n",
      "        9, 4, 8, 6, 8, 1, 7, 2, 6, 9, 8, 2, 7, 2, 2, 4, 8, 9, 3, 6, 2, 2, 7, 8,\n",
      "        5, 7, 2, 0, 0, 2, 3, 1, 1, 5, 8, 5, 3, 9, 7, 6])\n",
      "torch.Size([1000, 1, 28, 28])\n"
     ]
    }
   ],
   "source": [
    "examples = enumerate(test_loader)\n",
    "batch_idx, (example_data, example_targets) = next(examples)\n",
    "print(example_targets)\n",
    "print(example_data.shape)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 6 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "for i in range(6):\n",
    "    plt.subplot(2, 3, i + 1)\n",
    "    plt.tight_layout()\n",
    "    plt.imshow(example_data[i][0], cmap='gray', interpolation='none')\n",
    "    plt.title(\"Ground Truth: {}\".format(example_targets[i]))\n",
    "    plt.xticks([])\n",
    "    plt.yticks([])\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Net(nn.Module):\n",
    "    # 初始化方法，用于初始化网络的各个层和组件。\n",
    "    def __init__(self):\n",
    "        # 继承父类的一些属性\n",
    "        super(Net, self).__init__()\n",
    "        # 定义了一个卷积层conv1，输入通道数为1，输出通道数为10，卷积核大小为5x5。\n",
    "        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)\n",
    "        # 定义了另一个卷积层conv2，输入通道数为10，输出通道数为20，卷积核大小为5x5。\n",
    "        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)\n",
    "        # 定义了一个二维Dropout层conv2_drop。\n",
    "        self.conv2_drop = nn.Dropout2d()\n",
    "        # 定义了一个全连接层fc1，输入大小为320，输出大小为50。\n",
    "        self.fc1 = nn.Linear(320, 50)\n",
    "        # 定义了另一个全连接层fc2，输入大小为50，输出大小为10。\n",
    "        self.fc2 = nn.Linear(50, 10)\n",
    "\n",
    "    # Net类的前向传播函数，用于定义网络的数据流向。\n",
    "    def forward(self,x):\n",
    "        # 对输入x进行卷积、ReLU激活和最大池化操作，池化窗口大小为2，每个窗口的大小为2x2\n",
    "        # 最大池化是指特征图的每个2x2的窗口内的值取最大值，从而将特征图的尺寸减小一半。\n",
    "        x = F.relu(F.max_pool2d(self.conv1(x),2))\n",
    "        # 对第一个卷积层的输出进行卷积、Dropout、ReLU激活和最大池化操作。\n",
    "        x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)),2))\n",
    "        # 将张量x进行展平，变为一维向量。\n",
    "        x = x.view(-1, 320)\n",
    "        # 对展平后的向量进行全连接、ReLU激活操作。\n",
    "        x = F.relu(self.fc1(x))\n",
    "        # 对第一个全连接层的输出进行Dropout操作，self.training用于指示当前是否处于训练模式。\n",
    "        x = F.dropout(x, training=self.training)\n",
    "        # 对第二个全连接层的输出进行全连接操作。\n",
    "        x = self.fc2(x)\n",
    "        # 对输出进行log_softmax操作，用于多分类问题的概率预测。\n",
    "        return  F.log_softmax(x)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 初始化网络和优化器\n",
    "#实例化对象\n",
    "# 创建一个Net类的实例，即创建了一个神经网络对象。\n",
    "network = Net()\n",
    "# 创建一个随机梯度下降（SGD）优化器对象，用于优化网络的参数。\n",
    "# network.parameters()返回网络中的可学习参数，即需要进行梯度更新的参数。\n",
    "optimizer = optim.SGD(network.parameters(),lr=learning_rate,momentum=momentum)\n",
    "\n",
    "# 用于记录训练过程中的损失值和训练步数。\n",
    "train_losses = []\n",
    "train_counter = []\n",
    "# 创建了另外两个空列表，用于记录测试过程中的损失值和测试步数。\n",
    "# 根据训练数据集的大小和训练周期数来确定测试步数的间隔。\n",
    "test_losses = []\n",
    "test_counter = [i*len(train_loader.dataset) for i in range(n_epochs + 1)]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\not_e\\AppData\\Local\\Temp\\ipykernel_2412\\506843559.py:33: UserWarning: Implicit dimension choice for log_softmax has been deprecated. Change the call to include dim=X as an argument.\n",
      "  return  F.log_softmax(x)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Epoch: 1  [0/60000 (0%)]\tLoss:  2.298617\n",
      "Train Epoch: 1  [640/60000 (1%)]\tLoss:  2.350096\n",
      "Train Epoch: 1  [1280/60000 (2%)]\tLoss:  2.273290\n",
      "Train Epoch: 1  [1920/60000 (3%)]\tLoss:  2.284090\n",
      "Train Epoch: 1  [2560/60000 (4%)]\tLoss:  2.234949\n",
      "Train Epoch: 1  [3200/60000 (5%)]\tLoss:  2.198729\n",
      "Train Epoch: 1  [3840/60000 (6%)]\tLoss:  2.154454\n",
      "Train Epoch: 1  [4480/60000 (7%)]\tLoss:  2.147356\n",
      "Train Epoch: 1  [5120/60000 (9%)]\tLoss:  2.096519\n",
      "Train Epoch: 1  [5760/60000 (10%)]\tLoss:  1.996547\n",
      "Train Epoch: 1  [6400/60000 (11%)]\tLoss:  1.832203\n",
      "Train Epoch: 1  [7040/60000 (12%)]\tLoss:  1.806020\n",
      "Train Epoch: 1  [7680/60000 (13%)]\tLoss:  1.629170\n",
      "Train Epoch: 1  [8320/60000 (14%)]\tLoss:  1.490946\n",
      "Train Epoch: 1  [8960/60000 (15%)]\tLoss:  1.498307\n",
      "Train Epoch: 1  [9600/60000 (16%)]\tLoss:  1.431806\n",
      "Train Epoch: 1  [10240/60000 (17%)]\tLoss:  1.318092\n",
      "Train Epoch: 1  [10880/60000 (18%)]\tLoss:  1.338529\n",
      "Train Epoch: 1  [11520/60000 (19%)]\tLoss:  1.220700\n",
      "Train Epoch: 1  [12160/60000 (20%)]\tLoss:  1.246948\n",
      "Train Epoch: 1  [12800/60000 (21%)]\tLoss:  0.908154\n",
      "Train Epoch: 1  [13440/60000 (22%)]\tLoss:  1.025602\n",
      "Train Epoch: 1  [14080/60000 (23%)]\tLoss:  0.936306\n",
      "Train Epoch: 1  [14720/60000 (25%)]\tLoss:  0.959216\n",
      "Train Epoch: 1  [15360/60000 (26%)]\tLoss:  1.021577\n",
      "Train Epoch: 1  [16000/60000 (27%)]\tLoss:  0.902104\n",
      "Train Epoch: 1  [16640/60000 (28%)]\tLoss:  0.747271\n",
      "Train Epoch: 1  [17280/60000 (29%)]\tLoss:  0.769866\n",
      "Train Epoch: 1  [17920/60000 (30%)]\tLoss:  0.775420\n",
      "Train Epoch: 1  [18560/60000 (31%)]\tLoss:  0.678346\n",
      "Train Epoch: 1  [19200/60000 (32%)]\tLoss:  0.845526\n",
      "Train Epoch: 1  [19840/60000 (33%)]\tLoss:  0.777140\n",
      "Train Epoch: 1  [20480/60000 (34%)]\tLoss:  0.741894\n",
      "Train Epoch: 1  [21120/60000 (35%)]\tLoss:  0.893069\n",
      "Train Epoch: 1  [21760/60000 (36%)]\tLoss:  0.853810\n",
      "Train Epoch: 1  [22400/60000 (37%)]\tLoss:  0.465460\n",
      "Train Epoch: 1  [23040/60000 (38%)]\tLoss:  0.651360\n",
      "Train Epoch: 1  [23680/60000 (39%)]\tLoss:  0.625532\n",
      "Train Epoch: 1  [24320/60000 (41%)]\tLoss:  0.557865\n",
      "Train Epoch: 1  [24960/60000 (42%)]\tLoss:  0.598637\n",
      "Train Epoch: 1  [25600/60000 (43%)]\tLoss:  0.605649\n",
      "Train Epoch: 1  [26240/60000 (44%)]\tLoss:  0.865978\n",
      "Train Epoch: 1  [26880/60000 (45%)]\tLoss:  0.596060\n",
      "Train Epoch: 1  [27520/60000 (46%)]\tLoss:  0.763565\n",
      "Train Epoch: 1  [28160/60000 (47%)]\tLoss:  0.536041\n",
      "Train Epoch: 1  [28800/60000 (48%)]\tLoss:  0.359741\n",
      "Train Epoch: 1  [29440/60000 (49%)]\tLoss:  0.537241\n",
      "Train Epoch: 1  [30080/60000 (50%)]\tLoss:  0.684958\n",
      "Train Epoch: 1  [30720/60000 (51%)]\tLoss:  0.616967\n",
      "Train Epoch: 1  [31360/60000 (52%)]\tLoss:  0.692644\n",
      "Train Epoch: 1  [32000/60000 (53%)]\tLoss:  0.618817\n",
      "Train Epoch: 1  [32640/60000 (54%)]\tLoss:  0.642978\n",
      "Train Epoch: 1  [33280/60000 (55%)]\tLoss:  0.474918\n",
      "Train Epoch: 1  [33920/60000 (57%)]\tLoss:  0.709346\n",
      "Train Epoch: 1  [34560/60000 (58%)]\tLoss:  0.887860\n",
      "Train Epoch: 1  [35200/60000 (59%)]\tLoss:  0.678661\n",
      "Train Epoch: 1  [35840/60000 (60%)]\tLoss:  0.606422\n",
      "Train Epoch: 1  [36480/60000 (61%)]\tLoss:  0.743170\n",
      "Train Epoch: 1  [37120/60000 (62%)]\tLoss:  0.379302\n",
      "Train Epoch: 1  [37760/60000 (63%)]\tLoss:  0.544866\n",
      "Train Epoch: 1  [38400/60000 (64%)]\tLoss:  0.685248\n",
      "Train Epoch: 1  [39040/60000 (65%)]\tLoss:  0.496818\n",
      "Train Epoch: 1  [39680/60000 (66%)]\tLoss:  0.475326\n",
      "Train Epoch: 1  [40320/60000 (67%)]\tLoss:  0.714049\n",
      "Train Epoch: 1  [40960/60000 (68%)]\tLoss:  0.587388\n",
      "Train Epoch: 1  [41600/60000 (69%)]\tLoss:  0.284716\n",
      "Train Epoch: 1  [42240/60000 (70%)]\tLoss:  0.491353\n",
      "Train Epoch: 1  [42880/60000 (71%)]\tLoss:  0.584794\n",
      "Train Epoch: 1  [43520/60000 (72%)]\tLoss:  0.460371\n",
      "Train Epoch: 1  [44160/60000 (74%)]\tLoss:  0.368368\n",
      "Train Epoch: 1  [44800/60000 (75%)]\tLoss:  0.572485\n",
      "Train Epoch: 1  [45440/60000 (76%)]\tLoss:  0.534404\n",
      "Train Epoch: 1  [46080/60000 (77%)]\tLoss:  0.678069\n",
      "Train Epoch: 1  [46720/60000 (78%)]\tLoss:  0.319883\n",
      "Train Epoch: 1  [47360/60000 (79%)]\tLoss:  0.345143\n",
      "Train Epoch: 1  [48000/60000 (80%)]\tLoss:  0.488960\n",
      "Train Epoch: 1  [48640/60000 (81%)]\tLoss:  0.478569\n",
      "Train Epoch: 1  [49280/60000 (82%)]\tLoss:  0.420823\n",
      "Train Epoch: 1  [49920/60000 (83%)]\tLoss:  0.528646\n",
      "Train Epoch: 1  [50560/60000 (84%)]\tLoss:  0.542760\n",
      "Train Epoch: 1  [51200/60000 (85%)]\tLoss:  0.368557\n",
      "Train Epoch: 1  [51840/60000 (86%)]\tLoss:  0.665823\n",
      "Train Epoch: 1  [52480/60000 (87%)]\tLoss:  0.476350\n",
      "Train Epoch: 1  [53120/60000 (88%)]\tLoss:  0.696883\n",
      "Train Epoch: 1  [53760/60000 (90%)]\tLoss:  0.483676\n",
      "Train Epoch: 1  [54400/60000 (91%)]\tLoss:  0.521824\n",
      "Train Epoch: 1  [55040/60000 (92%)]\tLoss:  0.310628\n",
      "Train Epoch: 1  [55680/60000 (93%)]\tLoss:  0.537695\n",
      "Train Epoch: 1  [56320/60000 (94%)]\tLoss:  0.435502\n",
      "Train Epoch: 1  [56960/60000 (95%)]\tLoss:  0.441233\n",
      "Train Epoch: 1  [57600/60000 (96%)]\tLoss:  0.520266\n",
      "Train Epoch: 1  [58240/60000 (97%)]\tLoss:  0.583849\n",
      "Train Epoch: 1  [58880/60000 (98%)]\tLoss:  0.521676\n",
      "Train Epoch: 1  [59520/60000 (99%)]\tLoss:  0.255629\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\not_e\\anaconda3\\envs\\torch-gpu\\lib\\site-packages\\torch\\nn\\_reduction.py:42: UserWarning: size_average and reduce args will be deprecated, please use reduction='sum' instead.\n",
      "  warnings.warn(warning.format(ret))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Test set: Avg. loss:  0.1844,Accuracy : 9472/10000 ( 95%)\n",
      "\n",
      "Train Epoch: 1  [0/60000 (0%)]\tLoss:  0.401979\n",
      "Train Epoch: 1  [640/60000 (1%)]\tLoss:  0.465190\n",
      "Train Epoch: 1  [1280/60000 (2%)]\tLoss:  0.641176\n",
      "Train Epoch: 1  [1920/60000 (3%)]\tLoss:  0.401792\n",
      "Train Epoch: 1  [2560/60000 (4%)]\tLoss:  0.535566\n",
      "Train Epoch: 1  [3200/60000 (5%)]\tLoss:  0.352511\n",
      "Train Epoch: 1  [3840/60000 (6%)]\tLoss:  0.253841\n",
      "Train Epoch: 1  [4480/60000 (7%)]\tLoss:  0.334159\n",
      "Train Epoch: 1  [5120/60000 (9%)]\tLoss:  0.417613\n",
      "Train Epoch: 1  [5760/60000 (10%)]\tLoss:  0.329750\n",
      "Train Epoch: 1  [6400/60000 (11%)]\tLoss:  0.340970\n",
      "Train Epoch: 1  [7040/60000 (12%)]\tLoss:  0.304584\n",
      "Train Epoch: 1  [7680/60000 (13%)]\tLoss:  0.656059\n",
      "Train Epoch: 1  [8320/60000 (14%)]\tLoss:  0.513626\n",
      "Train Epoch: 1  [8960/60000 (15%)]\tLoss:  0.205321\n",
      "Train Epoch: 1  [9600/60000 (16%)]\tLoss:  0.327788\n",
      "Train Epoch: 1  [10240/60000 (17%)]\tLoss:  0.394942\n",
      "Train Epoch: 1  [10880/60000 (18%)]\tLoss:  0.414707\n",
      "Train Epoch: 1  [11520/60000 (19%)]\tLoss:  0.415874\n",
      "Train Epoch: 1  [12160/60000 (20%)]\tLoss:  0.318353\n",
      "Train Epoch: 1  [12800/60000 (21%)]\tLoss:  0.309408\n",
      "Train Epoch: 1  [13440/60000 (22%)]\tLoss:  0.354533\n",
      "Train Epoch: 1  [14080/60000 (23%)]\tLoss:  0.406410\n",
      "Train Epoch: 1  [14720/60000 (25%)]\tLoss:  0.413134\n",
      "Train Epoch: 1  [15360/60000 (26%)]\tLoss:  0.541512\n",
      "Train Epoch: 1  [16000/60000 (27%)]\tLoss:  0.353629\n",
      "Train Epoch: 1  [16640/60000 (28%)]\tLoss:  0.676992\n",
      "Train Epoch: 1  [17280/60000 (29%)]\tLoss:  0.324722\n",
      "Train Epoch: 1  [17920/60000 (30%)]\tLoss:  0.276738\n",
      "Train Epoch: 1  [18560/60000 (31%)]\tLoss:  0.492294\n",
      "Train Epoch: 1  [19200/60000 (32%)]\tLoss:  0.429350\n",
      "Train Epoch: 1  [19840/60000 (33%)]\tLoss:  0.356431\n",
      "Train Epoch: 1  [20480/60000 (34%)]\tLoss:  0.299664\n",
      "Train Epoch: 1  [21120/60000 (35%)]\tLoss:  0.492885\n",
      "Train Epoch: 1  [21760/60000 (36%)]\tLoss:  0.448419\n",
      "Train Epoch: 1  [22400/60000 (37%)]\tLoss:  0.325137\n",
      "Train Epoch: 1  [23040/60000 (38%)]\tLoss:  0.401986\n",
      "Train Epoch: 1  [23680/60000 (39%)]\tLoss:  0.386553\n",
      "Train Epoch: 1  [24320/60000 (41%)]\tLoss:  0.447967\n",
      "Train Epoch: 1  [24960/60000 (42%)]\tLoss:  0.329162\n",
      "Train Epoch: 1  [25600/60000 (43%)]\tLoss:  0.234086\n",
      "Train Epoch: 1  [26240/60000 (44%)]\tLoss:  0.238595\n",
      "Train Epoch: 1  [26880/60000 (45%)]\tLoss:  0.450216\n",
      "Train Epoch: 1  [27520/60000 (46%)]\tLoss:  0.406515\n",
      "Train Epoch: 1  [28160/60000 (47%)]\tLoss:  0.206573\n",
      "Train Epoch: 1  [28800/60000 (48%)]\tLoss:  0.276423\n",
      "Train Epoch: 1  [29440/60000 (49%)]\tLoss:  0.339042\n",
      "Train Epoch: 1  [30080/60000 (50%)]\tLoss:  0.245516\n",
      "Train Epoch: 1  [30720/60000 (51%)]\tLoss:  0.527960\n",
      "Train Epoch: 1  [31360/60000 (52%)]\tLoss:  0.486529\n",
      "Train Epoch: 1  [32000/60000 (53%)]\tLoss:  0.141150\n",
      "Train Epoch: 1  [32640/60000 (54%)]\tLoss:  0.407502\n",
      "Train Epoch: 1  [33280/60000 (55%)]\tLoss:  0.302414\n",
      "Train Epoch: 1  [33920/60000 (57%)]\tLoss:  0.200704\n",
      "Train Epoch: 1  [34560/60000 (58%)]\tLoss:  0.562442\n",
      "Train Epoch: 1  [35200/60000 (59%)]\tLoss:  0.564701\n",
      "Train Epoch: 1  [35840/60000 (60%)]\tLoss:  0.390468\n",
      "Train Epoch: 1  [36480/60000 (61%)]\tLoss:  0.631664\n",
      "Train Epoch: 1  [37120/60000 (62%)]\tLoss:  0.376455\n",
      "Train Epoch: 1  [37760/60000 (63%)]\tLoss:  0.168511\n",
      "Train Epoch: 1  [38400/60000 (64%)]\tLoss:  0.299634\n",
      "Train Epoch: 1  [39040/60000 (65%)]\tLoss:  0.452878\n",
      "Train Epoch: 1  [39680/60000 (66%)]\tLoss:  0.339091\n",
      "Train Epoch: 1  [40320/60000 (67%)]\tLoss:  0.468449\n",
      "Train Epoch: 1  [40960/60000 (68%)]\tLoss:  0.357389\n",
      "Train Epoch: 1  [41600/60000 (69%)]\tLoss:  0.458895\n",
      "Train Epoch: 1  [42240/60000 (70%)]\tLoss:  0.377263\n",
      "Train Epoch: 1  [42880/60000 (71%)]\tLoss:  0.392021\n",
      "Train Epoch: 1  [43520/60000 (72%)]\tLoss:  0.471112\n",
      "Train Epoch: 1  [44160/60000 (74%)]\tLoss:  0.307390\n",
      "Train Epoch: 1  [44800/60000 (75%)]\tLoss:  0.569331\n",
      "Train Epoch: 1  [45440/60000 (76%)]\tLoss:  0.559390\n",
      "Train Epoch: 1  [46080/60000 (77%)]\tLoss:  0.347763\n",
      "Train Epoch: 1  [46720/60000 (78%)]\tLoss:  0.299975\n",
      "Train Epoch: 1  [47360/60000 (79%)]\tLoss:  0.244066\n",
      "Train Epoch: 1  [48000/60000 (80%)]\tLoss:  0.478945\n",
      "Train Epoch: 1  [48640/60000 (81%)]\tLoss:  0.386152\n",
      "Train Epoch: 1  [49280/60000 (82%)]\tLoss:  0.566505\n",
      "Train Epoch: 1  [49920/60000 (83%)]\tLoss:  0.348914\n",
      "Train Epoch: 1  [50560/60000 (84%)]\tLoss:  0.202208\n",
      "Train Epoch: 1  [51200/60000 (85%)]\tLoss:  0.455773\n",
      "Train Epoch: 1  [51840/60000 (86%)]\tLoss:  0.341128\n",
      "Train Epoch: 1  [52480/60000 (87%)]\tLoss:  0.210311\n",
      "Train Epoch: 1  [53120/60000 (88%)]\tLoss:  0.197804\n",
      "Train Epoch: 1  [53760/60000 (90%)]\tLoss:  0.285494\n",
      "Train Epoch: 1  [54400/60000 (91%)]\tLoss:  0.395627\n",
      "Train Epoch: 1  [55040/60000 (92%)]\tLoss:  0.365778\n",
      "Train Epoch: 1  [55680/60000 (93%)]\tLoss:  0.379802\n",
      "Train Epoch: 1  [56320/60000 (94%)]\tLoss:  0.251884\n",
      "Train Epoch: 1  [56960/60000 (95%)]\tLoss:  0.179898\n",
      "Train Epoch: 1  [57600/60000 (96%)]\tLoss:  0.190747\n",
      "Train Epoch: 1  [58240/60000 (97%)]\tLoss:  0.389829\n",
      "Train Epoch: 1  [58880/60000 (98%)]\tLoss:  0.480480\n",
      "Train Epoch: 1  [59520/60000 (99%)]\tLoss:  0.336788\n",
      "\n",
      "Test set: Avg. loss:  0.1154,Accuracy : 9640/10000 ( 96%)\n",
      "\n",
      "Train Epoch: 2  [0/60000 (0%)]\tLoss:  0.405380\n",
      "Train Epoch: 2  [640/60000 (1%)]\tLoss:  0.522884\n",
      "Train Epoch: 2  [1280/60000 (2%)]\tLoss:  0.180625\n",
      "Train Epoch: 2  [1920/60000 (3%)]\tLoss:  0.408234\n",
      "Train Epoch: 2  [2560/60000 (4%)]\tLoss:  0.316490\n",
      "Train Epoch: 2  [3200/60000 (5%)]\tLoss:  0.150364\n",
      "Train Epoch: 2  [3840/60000 (6%)]\tLoss:  0.334419\n",
      "Train Epoch: 2  [4480/60000 (7%)]\tLoss:  0.475711\n",
      "Train Epoch: 2  [5120/60000 (9%)]\tLoss:  0.294628\n",
      "Train Epoch: 2  [5760/60000 (10%)]\tLoss:  0.177731\n",
      "Train Epoch: 2  [6400/60000 (11%)]\tLoss:  0.407386\n",
      "Train Epoch: 2  [7040/60000 (12%)]\tLoss:  0.340973\n",
      "Train Epoch: 2  [7680/60000 (13%)]\tLoss:  0.209915\n",
      "Train Epoch: 2  [8320/60000 (14%)]\tLoss:  0.505888\n",
      "Train Epoch: 2  [8960/60000 (15%)]\tLoss:  0.283868\n",
      "Train Epoch: 2  [9600/60000 (16%)]\tLoss:  0.222390\n",
      "Train Epoch: 2  [10240/60000 (17%)]\tLoss:  0.459158\n",
      "Train Epoch: 2  [10880/60000 (18%)]\tLoss:  0.269393\n",
      "Train Epoch: 2  [11520/60000 (19%)]\tLoss:  0.249818\n",
      "Train Epoch: 2  [12160/60000 (20%)]\tLoss:  0.308425\n",
      "Train Epoch: 2  [12800/60000 (21%)]\tLoss:  0.094564\n",
      "Train Epoch: 2  [13440/60000 (22%)]\tLoss:  0.265663\n",
      "Train Epoch: 2  [14080/60000 (23%)]\tLoss:  0.420161\n",
      "Train Epoch: 2  [14720/60000 (25%)]\tLoss:  0.253605\n",
      "Train Epoch: 2  [15360/60000 (26%)]\tLoss:  0.351606\n",
      "Train Epoch: 2  [16000/60000 (27%)]\tLoss:  0.331599\n",
      "Train Epoch: 2  [16640/60000 (28%)]\tLoss:  0.192089\n",
      "Train Epoch: 2  [17280/60000 (29%)]\tLoss:  0.338074\n",
      "Train Epoch: 2  [17920/60000 (30%)]\tLoss:  0.321290\n",
      "Train Epoch: 2  [18560/60000 (31%)]\tLoss:  0.318619\n",
      "Train Epoch: 2  [19200/60000 (32%)]\tLoss:  0.344346\n",
      "Train Epoch: 2  [19840/60000 (33%)]\tLoss:  0.312959\n",
      "Train Epoch: 2  [20480/60000 (34%)]\tLoss:  0.388590\n",
      "Train Epoch: 2  [21120/60000 (35%)]\tLoss:  0.283060\n",
      "Train Epoch: 2  [21760/60000 (36%)]\tLoss:  0.380502\n",
      "Train Epoch: 2  [22400/60000 (37%)]\tLoss:  0.313756\n",
      "Train Epoch: 2  [23040/60000 (38%)]\tLoss:  0.202409\n",
      "Train Epoch: 2  [23680/60000 (39%)]\tLoss:  0.261251\n",
      "Train Epoch: 2  [24320/60000 (41%)]\tLoss:  0.423763\n",
      "Train Epoch: 2  [24960/60000 (42%)]\tLoss:  0.603834\n",
      "Train Epoch: 2  [25600/60000 (43%)]\tLoss:  0.256402\n",
      "Train Epoch: 2  [26240/60000 (44%)]\tLoss:  0.336252\n",
      "Train Epoch: 2  [26880/60000 (45%)]\tLoss:  0.377872\n",
      "Train Epoch: 2  [27520/60000 (46%)]\tLoss:  0.244656\n",
      "Train Epoch: 2  [28160/60000 (47%)]\tLoss:  0.254610\n",
      "Train Epoch: 2  [28800/60000 (48%)]\tLoss:  0.288671\n",
      "Train Epoch: 2  [29440/60000 (49%)]\tLoss:  0.340637\n",
      "Train Epoch: 2  [30080/60000 (50%)]\tLoss:  0.243874\n",
      "Train Epoch: 2  [30720/60000 (51%)]\tLoss:  0.371005\n",
      "Train Epoch: 2  [31360/60000 (52%)]\tLoss:  0.421100\n",
      "Train Epoch: 2  [32000/60000 (53%)]\tLoss:  0.321370\n",
      "Train Epoch: 2  [32640/60000 (54%)]\tLoss:  0.310381\n",
      "Train Epoch: 2  [33280/60000 (55%)]\tLoss:  0.364946\n",
      "Train Epoch: 2  [33920/60000 (57%)]\tLoss:  0.288932\n",
      "Train Epoch: 2  [34560/60000 (58%)]\tLoss:  0.265564\n",
      "Train Epoch: 2  [35200/60000 (59%)]\tLoss:  0.611442\n",
      "Train Epoch: 2  [35840/60000 (60%)]\tLoss:  0.354619\n",
      "Train Epoch: 2  [36480/60000 (61%)]\tLoss:  0.382511\n",
      "Train Epoch: 2  [37120/60000 (62%)]\tLoss:  0.349003\n",
      "Train Epoch: 2  [37760/60000 (63%)]\tLoss:  0.280245\n",
      "Train Epoch: 2  [38400/60000 (64%)]\tLoss:  0.413521\n",
      "Train Epoch: 2  [39040/60000 (65%)]\tLoss:  0.157731\n",
      "Train Epoch: 2  [39680/60000 (66%)]\tLoss:  0.314359\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Epoch: 2  [40320/60000 (67%)]\tLoss:  0.409983\n",
      "Train Epoch: 2  [40960/60000 (68%)]\tLoss:  0.202633\n",
      "Train Epoch: 2  [41600/60000 (69%)]\tLoss:  0.422668\n",
      "Train Epoch: 2  [42240/60000 (70%)]\tLoss:  0.312408\n",
      "Train Epoch: 2  [42880/60000 (71%)]\tLoss:  0.284303\n",
      "Train Epoch: 2  [43520/60000 (72%)]\tLoss:  0.187069\n",
      "Train Epoch: 2  [44160/60000 (74%)]\tLoss:  0.128220\n",
      "Train Epoch: 2  [44800/60000 (75%)]\tLoss:  0.265006\n",
      "Train Epoch: 2  [45440/60000 (76%)]\tLoss:  0.153694\n",
      "Train Epoch: 2  [46080/60000 (77%)]\tLoss:  0.357145\n",
      "Train Epoch: 2  [46720/60000 (78%)]\tLoss:  0.286584\n",
      "Train Epoch: 2  [47360/60000 (79%)]\tLoss:  0.187366\n",
      "Train Epoch: 2  [48000/60000 (80%)]\tLoss:  0.347490\n",
      "Train Epoch: 2  [48640/60000 (81%)]\tLoss:  0.266603\n",
      "Train Epoch: 2  [49280/60000 (82%)]\tLoss:  0.198228\n",
      "Train Epoch: 2  [49920/60000 (83%)]\tLoss:  0.497308\n",
      "Train Epoch: 2  [50560/60000 (84%)]\tLoss:  0.137874\n",
      "Train Epoch: 2  [51200/60000 (85%)]\tLoss:  0.379737\n",
      "Train Epoch: 2  [51840/60000 (86%)]\tLoss:  0.251674\n",
      "Train Epoch: 2  [52480/60000 (87%)]\tLoss:  0.189674\n",
      "Train Epoch: 2  [53120/60000 (88%)]\tLoss:  0.439654\n",
      "Train Epoch: 2  [53760/60000 (90%)]\tLoss:  0.227436\n",
      "Train Epoch: 2  [54400/60000 (91%)]\tLoss:  0.155859\n",
      "Train Epoch: 2  [55040/60000 (92%)]\tLoss:  0.187088\n",
      "Train Epoch: 2  [55680/60000 (93%)]\tLoss:  0.328833\n",
      "Train Epoch: 2  [56320/60000 (94%)]\tLoss:  0.173681\n",
      "Train Epoch: 2  [56960/60000 (95%)]\tLoss:  0.274756\n",
      "Train Epoch: 2  [57600/60000 (96%)]\tLoss:  0.246310\n",
      "Train Epoch: 2  [58240/60000 (97%)]\tLoss:  0.288927\n",
      "Train Epoch: 2  [58880/60000 (98%)]\tLoss:  0.206814\n",
      "Train Epoch: 2  [59520/60000 (99%)]\tLoss:  0.278477\n",
      "\n",
      "Test set: Avg. loss:  0.0925,Accuracy : 9703/10000 ( 97%)\n",
      "\n",
      "Train Epoch: 3  [0/60000 (0%)]\tLoss:  0.290415\n",
      "Train Epoch: 3  [640/60000 (1%)]\tLoss:  0.195115\n",
      "Train Epoch: 3  [1280/60000 (2%)]\tLoss:  0.316168\n",
      "Train Epoch: 3  [1920/60000 (3%)]\tLoss:  0.202205\n",
      "Train Epoch: 3  [2560/60000 (4%)]\tLoss:  0.183676\n",
      "Train Epoch: 3  [3200/60000 (5%)]\tLoss:  0.286009\n",
      "Train Epoch: 3  [3840/60000 (6%)]\tLoss:  0.389970\n",
      "Train Epoch: 3  [4480/60000 (7%)]\tLoss:  0.331791\n",
      "Train Epoch: 3  [5120/60000 (9%)]\tLoss:  0.312703\n",
      "Train Epoch: 3  [5760/60000 (10%)]\tLoss:  0.230229\n",
      "Train Epoch: 3  [6400/60000 (11%)]\tLoss:  0.161534\n",
      "Train Epoch: 3  [7040/60000 (12%)]\tLoss:  0.265476\n",
      "Train Epoch: 3  [7680/60000 (13%)]\tLoss:  0.460647\n",
      "Train Epoch: 3  [8320/60000 (14%)]\tLoss:  0.227951\n",
      "Train Epoch: 3  [8960/60000 (15%)]\tLoss:  0.261129\n",
      "Train Epoch: 3  [9600/60000 (16%)]\tLoss:  0.379930\n",
      "Train Epoch: 3  [10240/60000 (17%)]\tLoss:  0.248004\n",
      "Train Epoch: 3  [10880/60000 (18%)]\tLoss:  0.263219\n",
      "Train Epoch: 3  [11520/60000 (19%)]\tLoss:  0.580592\n",
      "Train Epoch: 3  [12160/60000 (20%)]\tLoss:  0.235951\n",
      "Train Epoch: 3  [12800/60000 (21%)]\tLoss:  0.123996\n",
      "Train Epoch: 3  [13440/60000 (22%)]\tLoss:  0.247442\n",
      "Train Epoch: 3  [14080/60000 (23%)]\tLoss:  0.201969\n",
      "Train Epoch: 3  [14720/60000 (25%)]\tLoss:  0.153803\n",
      "Train Epoch: 3  [15360/60000 (26%)]\tLoss:  0.319521\n",
      "Train Epoch: 3  [16000/60000 (27%)]\tLoss:  0.244391\n",
      "Train Epoch: 3  [16640/60000 (28%)]\tLoss:  0.201063\n",
      "Train Epoch: 3  [17280/60000 (29%)]\tLoss:  0.180856\n",
      "Train Epoch: 3  [17920/60000 (30%)]\tLoss:  0.267617\n",
      "Train Epoch: 3  [18560/60000 (31%)]\tLoss:  0.253789\n",
      "Train Epoch: 3  [19200/60000 (32%)]\tLoss:  0.334903\n",
      "Train Epoch: 3  [19840/60000 (33%)]\tLoss:  0.433879\n",
      "Train Epoch: 3  [20480/60000 (34%)]\tLoss:  0.263243\n",
      "Train Epoch: 3  [21120/60000 (35%)]\tLoss:  0.199085\n",
      "Train Epoch: 3  [21760/60000 (36%)]\tLoss:  0.256425\n",
      "Train Epoch: 3  [22400/60000 (37%)]\tLoss:  0.298917\n",
      "Train Epoch: 3  [23040/60000 (38%)]\tLoss:  0.432429\n",
      "Train Epoch: 3  [23680/60000 (39%)]\tLoss:  0.331186\n",
      "Train Epoch: 3  [24320/60000 (41%)]\tLoss:  0.207798\n",
      "Train Epoch: 3  [24960/60000 (42%)]\tLoss:  0.141979\n",
      "Train Epoch: 3  [25600/60000 (43%)]\tLoss:  0.163878\n",
      "Train Epoch: 3  [26240/60000 (44%)]\tLoss:  0.285319\n",
      "Train Epoch: 3  [26880/60000 (45%)]\tLoss:  0.149436\n",
      "Train Epoch: 3  [27520/60000 (46%)]\tLoss:  0.254732\n",
      "Train Epoch: 3  [28160/60000 (47%)]\tLoss:  0.306857\n",
      "Train Epoch: 3  [28800/60000 (48%)]\tLoss:  0.631221\n",
      "Train Epoch: 3  [29440/60000 (49%)]\tLoss:  0.340059\n",
      "Train Epoch: 3  [30080/60000 (50%)]\tLoss:  0.246111\n",
      "Train Epoch: 3  [30720/60000 (51%)]\tLoss:  0.357479\n",
      "Train Epoch: 3  [31360/60000 (52%)]\tLoss:  0.190236\n",
      "Train Epoch: 3  [32000/60000 (53%)]\tLoss:  0.250319\n",
      "Train Epoch: 3  [32640/60000 (54%)]\tLoss:  0.102559\n",
      "Train Epoch: 3  [33280/60000 (55%)]\tLoss:  0.382700\n",
      "Train Epoch: 3  [33920/60000 (57%)]\tLoss:  0.276608\n",
      "Train Epoch: 3  [34560/60000 (58%)]\tLoss:  0.554247\n",
      "Train Epoch: 3  [35200/60000 (59%)]\tLoss:  0.318044\n",
      "Train Epoch: 3  [35840/60000 (60%)]\tLoss:  0.193514\n",
      "Train Epoch: 3  [36480/60000 (61%)]\tLoss:  0.156300\n",
      "Train Epoch: 3  [37120/60000 (62%)]\tLoss:  0.302922\n",
      "Train Epoch: 3  [37760/60000 (63%)]\tLoss:  0.241655\n",
      "Train Epoch: 3  [38400/60000 (64%)]\tLoss:  0.139318\n",
      "Train Epoch: 3  [39040/60000 (65%)]\tLoss:  0.103678\n",
      "Train Epoch: 3  [39680/60000 (66%)]\tLoss:  0.229155\n",
      "Train Epoch: 3  [40320/60000 (67%)]\tLoss:  0.138854\n",
      "Train Epoch: 3  [40960/60000 (68%)]\tLoss:  0.256009\n",
      "Train Epoch: 3  [41600/60000 (69%)]\tLoss:  0.474193\n",
      "Train Epoch: 3  [42240/60000 (70%)]\tLoss:  0.220717\n",
      "Train Epoch: 3  [42880/60000 (71%)]\tLoss:  0.145925\n",
      "Train Epoch: 3  [43520/60000 (72%)]\tLoss:  0.302552\n",
      "Train Epoch: 3  [44160/60000 (74%)]\tLoss:  0.389341\n",
      "Train Epoch: 3  [44800/60000 (75%)]\tLoss:  0.259003\n",
      "Train Epoch: 3  [45440/60000 (76%)]\tLoss:  0.238329\n",
      "Train Epoch: 3  [46080/60000 (77%)]\tLoss:  0.361879\n",
      "Train Epoch: 3  [46720/60000 (78%)]\tLoss:  0.272569\n",
      "Train Epoch: 3  [47360/60000 (79%)]\tLoss:  0.151941\n",
      "Train Epoch: 3  [48000/60000 (80%)]\tLoss:  0.107730\n",
      "Train Epoch: 3  [48640/60000 (81%)]\tLoss:  0.163702\n",
      "Train Epoch: 3  [49280/60000 (82%)]\tLoss:  0.253690\n",
      "Train Epoch: 3  [49920/60000 (83%)]\tLoss:  0.276619\n",
      "Train Epoch: 3  [50560/60000 (84%)]\tLoss:  0.171431\n",
      "Train Epoch: 3  [51200/60000 (85%)]\tLoss:  0.201868\n",
      "Train Epoch: 3  [51840/60000 (86%)]\tLoss:  0.131019\n",
      "Train Epoch: 3  [52480/60000 (87%)]\tLoss:  0.253825\n",
      "Train Epoch: 3  [53120/60000 (88%)]\tLoss:  0.222237\n",
      "Train Epoch: 3  [53760/60000 (90%)]\tLoss:  0.356037\n",
      "Train Epoch: 3  [54400/60000 (91%)]\tLoss:  0.240765\n",
      "Train Epoch: 3  [55040/60000 (92%)]\tLoss:  0.138088\n",
      "Train Epoch: 3  [55680/60000 (93%)]\tLoss:  0.220656\n",
      "Train Epoch: 3  [56320/60000 (94%)]\tLoss:  0.245800\n",
      "Train Epoch: 3  [56960/60000 (95%)]\tLoss:  0.232581\n",
      "Train Epoch: 3  [57600/60000 (96%)]\tLoss:  0.188457\n",
      "Train Epoch: 3  [58240/60000 (97%)]\tLoss:  0.196652\n",
      "Train Epoch: 3  [58880/60000 (98%)]\tLoss:  0.234829\n",
      "Train Epoch: 3  [59520/60000 (99%)]\tLoss:  0.190106\n",
      "\n",
      "Test set: Avg. loss:  0.0766,Accuracy : 9769/10000 ( 98%)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "#模型训练\n",
    "#尝试一次循环，看看精度与损失，准确度\n",
    "# epoch遍历数据集的次数,即训练轮数\n",
    "def train(epoch):\n",
    "    # 将神经网络模型设置为训练模式，这是为了确保在训练过程中启用一些特定的操作，如Dropout。\n",
    "    network.train()\n",
    "    # 使用enumerate函数遍历训练数据集(train_loader)\n",
    "    # batch_idx表示当前批次的索引，data是输入数据的批量，target是对应的标签。\n",
    "    for batch_idx, (data, target) in enumerate(train_loader):\n",
    "        # 在每个批次开始时，将优化器的梯度缓冲区清零，以准备计算当前批次的梯度。\n",
    "        optimizer.zero_grad()\n",
    "        # 通过将输入数据传递给网络模型(network)，计算模型的输出\n",
    "        output = network(data)\n",
    "        # 使用负对数似然损失函数(F.nll_loss)， 计算模型输出和目标标签之间的损失\n",
    "        loss = F.nll_loss(output,target)\n",
    "        # 根据损失值，执行反向传播过程，计算相对于模型参数的梯度。\n",
    "        loss.backward()\n",
    "        # 根据梯度更新模型的参数，使用优化器(optimizer)，来执行参数更新步骤。\n",
    "        optimizer.step()\n",
    "\n",
    "        # 如果当前批次的索引能被log_interval整除，表示达到了指定的打印间隔。\n",
    "        if batch_idx % log_interval == 0:\n",
    "            # 打印当前训练轮数、已处理的样本数量、总样本数量的百分比以及当前批次的损失值。\n",
    "            print('Train Epoch: {}  [{}/{} ({:.0f}%)]\\tLoss: {: .6f}'.format(\n",
    "                epoch, batch_idx*len(data), len(train_loader.dataset),\n",
    "                    100.*batch_idx/len(train_loader), loss.item()))\n",
    "            # append,给列表添加元素的指令\n",
    "            # 将当前批次的损失值和对应的训练步数添加到训练损失列表(train_losses)\n",
    "            # 和训练步数列表(train_counter)中，用于后续的可视化和分析。\n",
    "            train_losses.append(loss.item())\n",
    "            train_counter.append(\n",
    "                (batch_idx *64) + ((epoch -1) * len(train_loader.dataset)))\n",
    "\n",
    "            # 保存当前的网络模型参数和优化器状态，以便在需要时恢复和继续训练。\n",
    "            # 训练结束后都要保存网络\n",
    "            torch.save(network.state_dict(),'./model.pth')\n",
    "            torch.save(optimizer.state_dict(),'./optimizer.pth')\n",
    "\n",
    "# 调用训练的函数，次数为1\n",
    "train(1)\n",
    "\n",
    "# 进行测试\n",
    "def test():\n",
    "    # 将神经网络模型设置为评估模式，这是为了确保在评估过程中不启用一些特定的操作，如Dropout。\n",
    "    network.eval()\n",
    "    # test_loss，用于累积测试损失\n",
    "    test_loss = 0\n",
    "    # correct用于累积预测正确的样本数量。\n",
    "    correct = 0\n",
    "    # 使用torch.no_grad()\n",
    "    # 上下文管理器，表示在评估过程中不进行梯度计算，以减少内存消耗和加快计算速度。\n",
    "    with torch.no_grad():\n",
    "        # 遍历测试数据集(test_loader)，其中data是输入数据的批量，target是对应的标签。\n",
    "        for data, target in test_loader:\n",
    "            # 通过将输入数据传递给网络模型(network)，计算模型的输出。\n",
    "            output = network(data)\n",
    "            # 使用负对数似然损失函数(F.nll_loss)，计算模型输出和目标标签之间的损失，并累积到test_loss中。\n",
    "            test_loss = test_loss + F.nll_loss(output, target, size_average=False).item()\n",
    "            # 获取模型输出中概率最高的类别预测，即预测值。\n",
    "            pred = output.data.max(1, keepdim=True)[1]\n",
    "            # 计算预测值与目标标签相等的样本数量，并累积到correct中\n",
    "            correct = correct + pred.eq(target.data.view_as(pred)).sum()\n",
    "\n",
    "    # 计算平均测试损失，将累积的测试损失值除以测试数据集的样本数量。\n",
    "    test_loss = test_loss / len(test_loader.dataset)\n",
    "    # 将平均测试损失值添加到测试损失列表(test_losses)中，\n",
    "    test_losses.append(test_loss)\n",
    "\n",
    "    # 打印评估结果，包括平均测试损失和测试数据集上的准确率。\n",
    "    print('\\nTest set: Avg. loss: {: .4f},Accuracy : {}/{} ({: .0f}%)\\n'.format(\n",
    "        test_loss, correct, len(test_loader.dataset),\n",
    "        100.* correct / len(test_loader.dataset)))\n",
    "\n",
    "# 下面一段代码是用于进行训练和测试的主要循环\n",
    "# 在开始训练之前，首先调用test()函数对当前的模型在测试数据集上进行评估，\n",
    "# 以了解初始模型在未经训练的情况下的性能。\n",
    "test()\n",
    "# 从1到n_epochs（训练轮数+1）进行循环，表示训练过程中的每个训练轮次（epoch）。\n",
    "for epoch in range(1, n_epochs + 1):\n",
    "    # 调用train(epoch)函数，进行一次完整的训练轮次。\n",
    "    # 在train()函数中，会遍历训练数据集，并执行前向传播、计算损失、反向传播和参数更新等步骤。\n",
    "    train(epoch)\n",
    "    # 在完成一次训练轮次后，调用test()函数对当前模型在测试数据集上进行评估，\n",
    "    # 以了解训练过程中模型的性能变化。\n",
    "    test()\n",
    "\n",
    "# 通过这样的循环，每个训练轮次都会进行一次完整的训练和评估，\n",
    "# 以不断优化模型的参数，并监测训练的进展。\n",
    "# 这样的循环将重复多次，直到达到指定的训练轮数（n_epochs）为止。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\not_e\\AppData\\Local\\Temp\\ipykernel_2412\\506843559.py:33: UserWarning: Implicit dimension choice for log_softmax has been deprecated. Change the call to include dim=X as an argument.\n",
      "  return  F.log_softmax(x)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 创建一个新的图形窗口。\n",
    "fig = plt.figure()\n",
    "# 绘制训练损失曲线。train_counter是训练步数的列表，train_losses是对应的训练损失值的列表。\n",
    "# 通过plt.plot函数将训练步数和训练损失连接起来，形成一条蓝色曲线。\n",
    "plt.plot(train_counter, train_losses, color='blue')\n",
    "# 绘制测试损失数据点。test_counter是测试步数的列表，test_losses是对应的测试损失值的列表。\n",
    "# 通过plt.scatter函数将测试步数和测试损失以红色的散点图形式展示。\n",
    "plt.scatter(test_counter, test_losses, color='red')\n",
    "# 添加图例，标明蓝色曲线表示训练损失，红色散点表示测试损失。图例显示在图的右上方。\n",
    "plt.legend(['Train Loss', 'Test Loss'],loc='upper right')\n",
    "# 设置横轴和纵轴的标签，分别表示训练步数和损失值\n",
    "# 横轴上标上，所看到的训练样本的数量\n",
    "plt.xlabel('number of training examples seen')\n",
    "# 纵轴上标上负对数似然损失\n",
    "plt.ylabel('negative log likelihood loss')\n",
    "\n",
    "# 比较模型的输出，并输出相应的预测值\n",
    "# 使用enumerate函数遍历测试数据集(test_loader)，获取每个样本的索引和数据。\n",
    "examples = enumerate(test_loader)\n",
    "# 调用next函数获取下一个样本的索引和数据。\n",
    "# batch_idx表示当前样本在批次中的索引，\n",
    "# example_data和example_targets分别表示输入数据和对应的目标标签。\n",
    "batch_idx,(example_data,example_targets) = next(examples)\n",
    "# 使用torch.no_grad()上下文管理器，表示在计算模型输出时不进行梯度计算\n",
    "with torch.no_grad():\n",
    "    # 通过将example_data输入到网络模型(network)，计算模型的输出。\n",
    "    output = network(example_data)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 6 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 创建一个新的图形窗口。\n",
    "fig = plt.figure()\n",
    "# 使用循环遍历前6个样本，绘制子图并显示样本图像\n",
    "for i in range(6):\n",
    "    # 创建2x3的子图网格，并在当前子图中显示第i + 1个样本图像。\n",
    "    plt.subplot(2,3,i+1)\n",
    "    # 使得子图在图形窗口中紧凑且不重叠\n",
    "    plt.tight_layout()\n",
    "    # example_data[i][0]，表示第i个样本的图像数据。\n",
    "    # plt.imshow函数用于显示图像，\n",
    "    # cmap = 'gray'，表示使用灰度颜色映射，\n",
    "    # interpolation = 'none'，表示不进行插值。\n",
    "    plt.imshow(example_data[i][0],cmap='gray', interpolation='none')\n",
    "    # 显示预测结果。output.data.max(1, keepdim=True)[1][i].item()\n",
    "    # 表示对于第i个样本，获取预测概率最高的类别，并将其作为预测结果。\n",
    "    plt.title(\"Prediction: {}\".format(output.data.max(1, keepdim=True)[1][i].item()))\n",
    "    # 不添加横纵坐标\n",
    "    plt.xticks([])\n",
    "    plt.yticks([])\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\not_e\\AppData\\Local\\Temp\\ipykernel_2412\\506843559.py:33: UserWarning: Implicit dimension choice for log_softmax has been deprecated. Change the call to include dim=X as an argument.\n",
      "  return  F.log_softmax(x)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Epoch: 4  [0/60000 (0%)]\tLoss:  0.431373\n",
      "Train Epoch: 4  [640/60000 (1%)]\tLoss:  0.193847\n",
      "Train Epoch: 4  [1280/60000 (2%)]\tLoss:  0.323825\n",
      "Train Epoch: 4  [1920/60000 (3%)]\tLoss:  0.518562\n",
      "Train Epoch: 4  [2560/60000 (4%)]\tLoss:  0.160924\n",
      "Train Epoch: 4  [3200/60000 (5%)]\tLoss:  0.184491\n",
      "Train Epoch: 4  [3840/60000 (6%)]\tLoss:  0.130370\n",
      "Train Epoch: 4  [4480/60000 (7%)]\tLoss:  0.171270\n",
      "Train Epoch: 4  [5120/60000 (9%)]\tLoss:  0.233280\n",
      "Train Epoch: 4  [5760/60000 (10%)]\tLoss:  0.176352\n",
      "Train Epoch: 4  [6400/60000 (11%)]\tLoss:  0.427302\n",
      "Train Epoch: 4  [7040/60000 (12%)]\tLoss:  0.199777\n",
      "Train Epoch: 4  [7680/60000 (13%)]\tLoss:  0.278013\n",
      "Train Epoch: 4  [8320/60000 (14%)]\tLoss:  0.241047\n",
      "Train Epoch: 4  [8960/60000 (15%)]\tLoss:  0.362789\n",
      "Train Epoch: 4  [9600/60000 (16%)]\tLoss:  0.315076\n",
      "Train Epoch: 4  [10240/60000 (17%)]\tLoss:  0.411075\n",
      "Train Epoch: 4  [10880/60000 (18%)]\tLoss:  0.421323\n",
      "Train Epoch: 4  [11520/60000 (19%)]\tLoss:  0.253289\n",
      "Train Epoch: 4  [12160/60000 (20%)]\tLoss:  0.351923\n",
      "Train Epoch: 4  [12800/60000 (21%)]\tLoss:  0.136022\n",
      "Train Epoch: 4  [13440/60000 (22%)]\tLoss:  0.243784\n",
      "Train Epoch: 4  [14080/60000 (23%)]\tLoss:  0.191252\n",
      "Train Epoch: 4  [14720/60000 (25%)]\tLoss:  0.107693\n",
      "Train Epoch: 4  [15360/60000 (26%)]\tLoss:  0.173108\n",
      "Train Epoch: 4  [16000/60000 (27%)]\tLoss:  0.202076\n",
      "Train Epoch: 4  [16640/60000 (28%)]\tLoss:  0.233325\n",
      "Train Epoch: 4  [17280/60000 (29%)]\tLoss:  0.173420\n",
      "Train Epoch: 4  [17920/60000 (30%)]\tLoss:  0.458072\n",
      "Train Epoch: 4  [18560/60000 (31%)]\tLoss:  0.174460\n",
      "Train Epoch: 4  [19200/60000 (32%)]\tLoss:  0.230388\n",
      "Train Epoch: 4  [19840/60000 (33%)]\tLoss:  0.187417\n",
      "Train Epoch: 4  [20480/60000 (34%)]\tLoss:  0.132547\n",
      "Train Epoch: 4  [21120/60000 (35%)]\tLoss:  0.240487\n",
      "Train Epoch: 4  [21760/60000 (36%)]\tLoss:  0.234771\n",
      "Train Epoch: 4  [22400/60000 (37%)]\tLoss:  0.167059\n",
      "Train Epoch: 4  [23040/60000 (38%)]\tLoss:  0.161595\n",
      "Train Epoch: 4  [23680/60000 (39%)]\tLoss:  0.269623\n",
      "Train Epoch: 4  [24320/60000 (41%)]\tLoss:  0.093589\n",
      "Train Epoch: 4  [24960/60000 (42%)]\tLoss:  0.333669\n",
      "Train Epoch: 4  [25600/60000 (43%)]\tLoss:  0.117154\n",
      "Train Epoch: 4  [26240/60000 (44%)]\tLoss:  0.216316\n",
      "Train Epoch: 4  [26880/60000 (45%)]\tLoss:  0.307335\n",
      "Train Epoch: 4  [27520/60000 (46%)]\tLoss:  0.134116\n",
      "Train Epoch: 4  [28160/60000 (47%)]\tLoss:  0.259553\n",
      "Train Epoch: 4  [28800/60000 (48%)]\tLoss:  0.129206\n",
      "Train Epoch: 4  [29440/60000 (49%)]\tLoss:  0.238580\n",
      "Train Epoch: 4  [30080/60000 (50%)]\tLoss:  0.149653\n",
      "Train Epoch: 4  [30720/60000 (51%)]\tLoss:  0.147173\n",
      "Train Epoch: 4  [31360/60000 (52%)]\tLoss:  0.325022\n",
      "Train Epoch: 4  [32000/60000 (53%)]\tLoss:  0.376982\n",
      "Train Epoch: 4  [32640/60000 (54%)]\tLoss:  0.286206\n",
      "Train Epoch: 4  [33280/60000 (55%)]\tLoss:  0.236963\n",
      "Train Epoch: 4  [33920/60000 (57%)]\tLoss:  0.309123\n",
      "Train Epoch: 4  [34560/60000 (58%)]\tLoss:  0.154804\n",
      "Train Epoch: 4  [35200/60000 (59%)]\tLoss:  0.264927\n",
      "Train Epoch: 4  [35840/60000 (60%)]\tLoss:  0.202823\n",
      "Train Epoch: 4  [36480/60000 (61%)]\tLoss:  0.133207\n",
      "Train Epoch: 4  [37120/60000 (62%)]\tLoss:  0.132314\n",
      "Train Epoch: 4  [37760/60000 (63%)]\tLoss:  0.135724\n",
      "Train Epoch: 4  [38400/60000 (64%)]\tLoss:  0.316021\n",
      "Train Epoch: 4  [39040/60000 (65%)]\tLoss:  0.275498\n",
      "Train Epoch: 4  [39680/60000 (66%)]\tLoss:  0.206016\n",
      "Train Epoch: 4  [40320/60000 (67%)]\tLoss:  0.164338\n",
      "Train Epoch: 4  [40960/60000 (68%)]\tLoss:  0.183788\n",
      "Train Epoch: 4  [41600/60000 (69%)]\tLoss:  0.169353\n",
      "Train Epoch: 4  [42240/60000 (70%)]\tLoss:  0.211292\n",
      "Train Epoch: 4  [42880/60000 (71%)]\tLoss:  0.334743\n",
      "Train Epoch: 4  [43520/60000 (72%)]\tLoss:  0.156373\n",
      "Train Epoch: 4  [44160/60000 (74%)]\tLoss:  0.125078\n",
      "Train Epoch: 4  [44800/60000 (75%)]\tLoss:  0.225340\n",
      "Train Epoch: 4  [45440/60000 (76%)]\tLoss:  0.150536\n",
      "Train Epoch: 4  [46080/60000 (77%)]\tLoss:  0.116149\n",
      "Train Epoch: 4  [46720/60000 (78%)]\tLoss:  0.412939\n",
      "Train Epoch: 4  [47360/60000 (79%)]\tLoss:  0.297651\n",
      "Train Epoch: 4  [48000/60000 (80%)]\tLoss:  0.218874\n",
      "Train Epoch: 4  [48640/60000 (81%)]\tLoss:  0.289242\n",
      "Train Epoch: 4  [49280/60000 (82%)]\tLoss:  0.342065\n",
      "Train Epoch: 4  [49920/60000 (83%)]\tLoss:  0.300261\n",
      "Train Epoch: 4  [50560/60000 (84%)]\tLoss:  0.185535\n",
      "Train Epoch: 4  [51200/60000 (85%)]\tLoss:  0.221203\n",
      "Train Epoch: 4  [51840/60000 (86%)]\tLoss:  0.273139\n",
      "Train Epoch: 4  [52480/60000 (87%)]\tLoss:  0.449302\n",
      "Train Epoch: 4  [53120/60000 (88%)]\tLoss:  0.173667\n",
      "Train Epoch: 4  [53760/60000 (90%)]\tLoss:  0.177477\n",
      "Train Epoch: 4  [54400/60000 (91%)]\tLoss:  0.286109\n",
      "Train Epoch: 4  [55040/60000 (92%)]\tLoss:  0.138286\n",
      "Train Epoch: 4  [55680/60000 (93%)]\tLoss:  0.241577\n",
      "Train Epoch: 4  [56320/60000 (94%)]\tLoss:  0.344160\n",
      "Train Epoch: 4  [56960/60000 (95%)]\tLoss:  0.470256\n",
      "Train Epoch: 4  [57600/60000 (96%)]\tLoss:  0.301451\n",
      "Train Epoch: 4  [58240/60000 (97%)]\tLoss:  0.331457\n",
      "Train Epoch: 4  [58880/60000 (98%)]\tLoss:  0.110693\n",
      "Train Epoch: 4  [59520/60000 (99%)]\tLoss:  0.202327\n",
      "\n",
      "Test set: Avg. loss:  0.0677,Accuracy : 9792/10000 ( 98%)\n",
      "\n",
      "Train Epoch: 5  [0/60000 (0%)]\tLoss:  0.257072\n",
      "Train Epoch: 5  [640/60000 (1%)]\tLoss:  0.112400\n",
      "Train Epoch: 5  [1280/60000 (2%)]\tLoss:  0.286336\n",
      "Train Epoch: 5  [1920/60000 (3%)]\tLoss:  0.205176\n",
      "Train Epoch: 5  [2560/60000 (4%)]\tLoss:  0.117157\n",
      "Train Epoch: 5  [3200/60000 (5%)]\tLoss:  0.219942\n",
      "Train Epoch: 5  [3840/60000 (6%)]\tLoss:  0.123832\n",
      "Train Epoch: 5  [4480/60000 (7%)]\tLoss:  0.408710\n",
      "Train Epoch: 5  [5120/60000 (9%)]\tLoss:  0.093983\n",
      "Train Epoch: 5  [5760/60000 (10%)]\tLoss:  0.130969\n",
      "Train Epoch: 5  [6400/60000 (11%)]\tLoss:  0.184003\n",
      "Train Epoch: 5  [7040/60000 (12%)]\tLoss:  0.099812\n",
      "Train Epoch: 5  [7680/60000 (13%)]\tLoss:  0.223143\n",
      "Train Epoch: 5  [8320/60000 (14%)]\tLoss:  0.161756\n",
      "Train Epoch: 5  [8960/60000 (15%)]\tLoss:  0.159732\n",
      "Train Epoch: 5  [9600/60000 (16%)]\tLoss:  0.248352\n",
      "Train Epoch: 5  [10240/60000 (17%)]\tLoss:  0.243647\n",
      "Train Epoch: 5  [10880/60000 (18%)]\tLoss:  0.262982\n",
      "Train Epoch: 5  [11520/60000 (19%)]\tLoss:  0.395471\n",
      "Train Epoch: 5  [12160/60000 (20%)]\tLoss:  0.208558\n",
      "Train Epoch: 5  [12800/60000 (21%)]\tLoss:  0.162920\n",
      "Train Epoch: 5  [13440/60000 (22%)]\tLoss:  0.310409\n",
      "Train Epoch: 5  [14080/60000 (23%)]\tLoss:  0.152700\n",
      "Train Epoch: 5  [14720/60000 (25%)]\tLoss:  0.156701\n",
      "Train Epoch: 5  [15360/60000 (26%)]\tLoss:  0.195632\n",
      "Train Epoch: 5  [16000/60000 (27%)]\tLoss:  0.256003\n",
      "Train Epoch: 5  [16640/60000 (28%)]\tLoss:  0.307958\n",
      "Train Epoch: 5  [17280/60000 (29%)]\tLoss:  0.239918\n",
      "Train Epoch: 5  [17920/60000 (30%)]\tLoss:  0.164946\n",
      "Train Epoch: 5  [18560/60000 (31%)]\tLoss:  0.261297\n",
      "Train Epoch: 5  [19200/60000 (32%)]\tLoss:  0.587551\n",
      "Train Epoch: 5  [19840/60000 (33%)]\tLoss:  0.205659\n",
      "Train Epoch: 5  [20480/60000 (34%)]\tLoss:  0.061949\n",
      "Train Epoch: 5  [21120/60000 (35%)]\tLoss:  0.219546\n",
      "Train Epoch: 5  [21760/60000 (36%)]\tLoss:  0.286483\n",
      "Train Epoch: 5  [22400/60000 (37%)]\tLoss:  0.304919\n",
      "Train Epoch: 5  [23040/60000 (38%)]\tLoss:  0.207604\n",
      "Train Epoch: 5  [23680/60000 (39%)]\tLoss:  0.224008\n",
      "Train Epoch: 5  [24320/60000 (41%)]\tLoss:  0.213696\n",
      "Train Epoch: 5  [24960/60000 (42%)]\tLoss:  0.087136\n",
      "Train Epoch: 5  [25600/60000 (43%)]\tLoss:  0.173608\n",
      "Train Epoch: 5  [26240/60000 (44%)]\tLoss:  0.205519\n",
      "Train Epoch: 5  [26880/60000 (45%)]\tLoss:  0.361609\n",
      "Train Epoch: 5  [27520/60000 (46%)]\tLoss:  0.081668\n",
      "Train Epoch: 5  [28160/60000 (47%)]\tLoss:  0.388777\n",
      "Train Epoch: 5  [28800/60000 (48%)]\tLoss:  0.281312\n",
      "Train Epoch: 5  [29440/60000 (49%)]\tLoss:  0.141609\n",
      "Train Epoch: 5  [30080/60000 (50%)]\tLoss:  0.157692\n",
      "Train Epoch: 5  [30720/60000 (51%)]\tLoss:  0.117921\n",
      "Train Epoch: 5  [31360/60000 (52%)]\tLoss:  0.312925\n",
      "Train Epoch: 5  [32000/60000 (53%)]\tLoss:  0.167058\n",
      "Train Epoch: 5  [32640/60000 (54%)]\tLoss:  0.254926\n",
      "Train Epoch: 5  [33280/60000 (55%)]\tLoss:  0.144481\n",
      "Train Epoch: 5  [33920/60000 (57%)]\tLoss:  0.402912\n",
      "Train Epoch: 5  [34560/60000 (58%)]\tLoss:  0.235741\n",
      "Train Epoch: 5  [35200/60000 (59%)]\tLoss:  0.180295\n",
      "Train Epoch: 5  [35840/60000 (60%)]\tLoss:  0.191310\n",
      "Train Epoch: 5  [36480/60000 (61%)]\tLoss:  0.126376\n",
      "Train Epoch: 5  [37120/60000 (62%)]\tLoss:  0.175324\n",
      "Train Epoch: 5  [37760/60000 (63%)]\tLoss:  0.376176\n",
      "Train Epoch: 5  [38400/60000 (64%)]\tLoss:  0.100717\n",
      "Train Epoch: 5  [39040/60000 (65%)]\tLoss:  0.123836\n",
      "Train Epoch: 5  [39680/60000 (66%)]\tLoss:  0.085436\n",
      "Train Epoch: 5  [40320/60000 (67%)]\tLoss:  0.128451\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Epoch: 5  [40960/60000 (68%)]\tLoss:  0.083263\n",
      "Train Epoch: 5  [41600/60000 (69%)]\tLoss:  0.123835\n",
      "Train Epoch: 5  [42240/60000 (70%)]\tLoss:  0.322619\n",
      "Train Epoch: 5  [42880/60000 (71%)]\tLoss:  0.356229\n",
      "Train Epoch: 5  [43520/60000 (72%)]\tLoss:  0.125591\n",
      "Train Epoch: 5  [44160/60000 (74%)]\tLoss:  0.147261\n",
      "Train Epoch: 5  [44800/60000 (75%)]\tLoss:  0.102599\n",
      "Train Epoch: 5  [45440/60000 (76%)]\tLoss:  0.044659\n",
      "Train Epoch: 5  [46080/60000 (77%)]\tLoss:  0.253153\n",
      "Train Epoch: 5  [46720/60000 (78%)]\tLoss:  0.228757\n",
      "Train Epoch: 5  [47360/60000 (79%)]\tLoss:  0.232169\n",
      "Train Epoch: 5  [48000/60000 (80%)]\tLoss:  0.132957\n",
      "Train Epoch: 5  [48640/60000 (81%)]\tLoss:  0.058383\n",
      "Train Epoch: 5  [49280/60000 (82%)]\tLoss:  0.126918\n",
      "Train Epoch: 5  [49920/60000 (83%)]\tLoss:  0.228332\n",
      "Train Epoch: 5  [50560/60000 (84%)]\tLoss:  0.184798\n",
      "Train Epoch: 5  [51200/60000 (85%)]\tLoss:  0.194462\n",
      "Train Epoch: 5  [51840/60000 (86%)]\tLoss:  0.181845\n",
      "Train Epoch: 5  [52480/60000 (87%)]\tLoss:  0.273871\n",
      "Train Epoch: 5  [53120/60000 (88%)]\tLoss:  0.215307\n",
      "Train Epoch: 5  [53760/60000 (90%)]\tLoss:  0.281333\n",
      "Train Epoch: 5  [54400/60000 (91%)]\tLoss:  0.203900\n",
      "Train Epoch: 5  [55040/60000 (92%)]\tLoss:  0.253478\n",
      "Train Epoch: 5  [55680/60000 (93%)]\tLoss:  0.224970\n",
      "Train Epoch: 5  [56320/60000 (94%)]\tLoss:  0.269390\n",
      "Train Epoch: 5  [56960/60000 (95%)]\tLoss:  0.382119\n",
      "Train Epoch: 5  [57600/60000 (96%)]\tLoss:  0.149632\n",
      "Train Epoch: 5  [58240/60000 (97%)]\tLoss:  0.178719\n",
      "Train Epoch: 5  [58880/60000 (98%)]\tLoss:  0.166199\n",
      "Train Epoch: 5  [59520/60000 (99%)]\tLoss:  0.193103\n",
      "\n",
      "Test set: Avg. loss:  0.0638,Accuracy : 9807/10000 ( 98%)\n",
      "\n",
      "Train Epoch: 6  [0/60000 (0%)]\tLoss:  0.205938\n",
      "Train Epoch: 6  [640/60000 (1%)]\tLoss:  0.358499\n",
      "Train Epoch: 6  [1280/60000 (2%)]\tLoss:  0.394989\n",
      "Train Epoch: 6  [1920/60000 (3%)]\tLoss:  0.130624\n",
      "Train Epoch: 6  [2560/60000 (4%)]\tLoss:  0.087194\n",
      "Train Epoch: 6  [3200/60000 (5%)]\tLoss:  0.169071\n",
      "Train Epoch: 6  [3840/60000 (6%)]\tLoss:  0.177381\n",
      "Train Epoch: 6  [4480/60000 (7%)]\tLoss:  0.209492\n",
      "Train Epoch: 6  [5120/60000 (9%)]\tLoss:  0.334755\n",
      "Train Epoch: 6  [5760/60000 (10%)]\tLoss:  0.133610\n",
      "Train Epoch: 6  [6400/60000 (11%)]\tLoss:  0.172360\n",
      "Train Epoch: 6  [7040/60000 (12%)]\tLoss:  0.126916\n",
      "Train Epoch: 6  [7680/60000 (13%)]\tLoss:  0.183938\n",
      "Train Epoch: 6  [8320/60000 (14%)]\tLoss:  0.272925\n",
      "Train Epoch: 6  [8960/60000 (15%)]\tLoss:  0.229932\n",
      "Train Epoch: 6  [9600/60000 (16%)]\tLoss:  0.263420\n",
      "Train Epoch: 6  [10240/60000 (17%)]\tLoss:  0.208009\n",
      "Train Epoch: 6  [10880/60000 (18%)]\tLoss:  0.159873\n",
      "Train Epoch: 6  [11520/60000 (19%)]\tLoss:  0.280119\n",
      "Train Epoch: 6  [12160/60000 (20%)]\tLoss:  0.190593\n",
      "Train Epoch: 6  [12800/60000 (21%)]\tLoss:  0.194272\n",
      "Train Epoch: 6  [13440/60000 (22%)]\tLoss:  0.133571\n",
      "Train Epoch: 6  [14080/60000 (23%)]\tLoss:  0.102041\n",
      "Train Epoch: 6  [14720/60000 (25%)]\tLoss:  0.379675\n",
      "Train Epoch: 6  [15360/60000 (26%)]\tLoss:  0.327552\n",
      "Train Epoch: 6  [16000/60000 (27%)]\tLoss:  0.101081\n",
      "Train Epoch: 6  [16640/60000 (28%)]\tLoss:  0.223249\n",
      "Train Epoch: 6  [17280/60000 (29%)]\tLoss:  0.126265\n",
      "Train Epoch: 6  [17920/60000 (30%)]\tLoss:  0.158305\n",
      "Train Epoch: 6  [18560/60000 (31%)]\tLoss:  0.161353\n",
      "Train Epoch: 6  [19200/60000 (32%)]\tLoss:  0.253412\n",
      "Train Epoch: 6  [19840/60000 (33%)]\tLoss:  0.123339\n",
      "Train Epoch: 6  [20480/60000 (34%)]\tLoss:  0.195176\n",
      "Train Epoch: 6  [21120/60000 (35%)]\tLoss:  0.281286\n",
      "Train Epoch: 6  [21760/60000 (36%)]\tLoss:  0.140820\n",
      "Train Epoch: 6  [22400/60000 (37%)]\tLoss:  0.117181\n",
      "Train Epoch: 6  [23040/60000 (38%)]\tLoss:  0.160314\n",
      "Train Epoch: 6  [23680/60000 (39%)]\tLoss:  0.235500\n",
      "Train Epoch: 6  [24320/60000 (41%)]\tLoss:  0.123230\n",
      "Train Epoch: 6  [24960/60000 (42%)]\tLoss:  0.232863\n",
      "Train Epoch: 6  [25600/60000 (43%)]\tLoss:  0.235265\n",
      "Train Epoch: 6  [26240/60000 (44%)]\tLoss:  0.192047\n",
      "Train Epoch: 6  [26880/60000 (45%)]\tLoss:  0.136168\n",
      "Train Epoch: 6  [27520/60000 (46%)]\tLoss:  0.173686\n",
      "Train Epoch: 6  [28160/60000 (47%)]\tLoss:  0.291611\n",
      "Train Epoch: 6  [28800/60000 (48%)]\tLoss:  0.234793\n",
      "Train Epoch: 6  [29440/60000 (49%)]\tLoss:  0.146046\n",
      "Train Epoch: 6  [30080/60000 (50%)]\tLoss:  0.084597\n",
      "Train Epoch: 6  [30720/60000 (51%)]\tLoss:  0.185975\n",
      "Train Epoch: 6  [31360/60000 (52%)]\tLoss:  0.287258\n",
      "Train Epoch: 6  [32000/60000 (53%)]\tLoss:  0.316984\n",
      "Train Epoch: 6  [32640/60000 (54%)]\tLoss:  0.249531\n",
      "Train Epoch: 6  [33280/60000 (55%)]\tLoss:  0.238943\n",
      "Train Epoch: 6  [33920/60000 (57%)]\tLoss:  0.211367\n",
      "Train Epoch: 6  [34560/60000 (58%)]\tLoss:  0.109623\n",
      "Train Epoch: 6  [35200/60000 (59%)]\tLoss:  0.135034\n",
      "Train Epoch: 6  [35840/60000 (60%)]\tLoss:  0.128813\n",
      "Train Epoch: 6  [36480/60000 (61%)]\tLoss:  0.146194\n",
      "Train Epoch: 6  [37120/60000 (62%)]\tLoss:  0.336656\n",
      "Train Epoch: 6  [37760/60000 (63%)]\tLoss:  0.235027\n",
      "Train Epoch: 6  [38400/60000 (64%)]\tLoss:  0.144909\n",
      "Train Epoch: 6  [39040/60000 (65%)]\tLoss:  0.181811\n",
      "Train Epoch: 6  [39680/60000 (66%)]\tLoss:  0.357004\n",
      "Train Epoch: 6  [40320/60000 (67%)]\tLoss:  0.117246\n",
      "Train Epoch: 6  [40960/60000 (68%)]\tLoss:  0.187950\n",
      "Train Epoch: 6  [41600/60000 (69%)]\tLoss:  0.281482\n",
      "Train Epoch: 6  [42240/60000 (70%)]\tLoss:  0.146896\n",
      "Train Epoch: 6  [42880/60000 (71%)]\tLoss:  0.244085\n",
      "Train Epoch: 6  [43520/60000 (72%)]\tLoss:  0.178886\n",
      "Train Epoch: 6  [44160/60000 (74%)]\tLoss:  0.346247\n",
      "Train Epoch: 6  [44800/60000 (75%)]\tLoss:  0.199782\n",
      "Train Epoch: 6  [45440/60000 (76%)]\tLoss:  0.245853\n",
      "Train Epoch: 6  [46080/60000 (77%)]\tLoss:  0.198043\n",
      "Train Epoch: 6  [46720/60000 (78%)]\tLoss:  0.178593\n",
      "Train Epoch: 6  [47360/60000 (79%)]\tLoss:  0.196074\n",
      "Train Epoch: 6  [48000/60000 (80%)]\tLoss:  0.116728\n",
      "Train Epoch: 6  [48640/60000 (81%)]\tLoss:  0.140139\n",
      "Train Epoch: 6  [49280/60000 (82%)]\tLoss:  0.110006\n",
      "Train Epoch: 6  [49920/60000 (83%)]\tLoss:  0.063300\n",
      "Train Epoch: 6  [50560/60000 (84%)]\tLoss:  0.233840\n",
      "Train Epoch: 6  [51200/60000 (85%)]\tLoss:  0.113804\n",
      "Train Epoch: 6  [51840/60000 (86%)]\tLoss:  0.246801\n",
      "Train Epoch: 6  [52480/60000 (87%)]\tLoss:  0.349399\n",
      "Train Epoch: 6  [53120/60000 (88%)]\tLoss:  0.193118\n",
      "Train Epoch: 6  [53760/60000 (90%)]\tLoss:  0.114912\n",
      "Train Epoch: 6  [54400/60000 (91%)]\tLoss:  0.167941\n",
      "Train Epoch: 6  [55040/60000 (92%)]\tLoss:  0.266371\n",
      "Train Epoch: 6  [55680/60000 (93%)]\tLoss:  0.128182\n",
      "Train Epoch: 6  [56320/60000 (94%)]\tLoss:  0.255794\n",
      "Train Epoch: 6  [56960/60000 (95%)]\tLoss:  0.158816\n",
      "Train Epoch: 6  [57600/60000 (96%)]\tLoss:  0.248567\n",
      "Train Epoch: 6  [58240/60000 (97%)]\tLoss:  0.244100\n",
      "Train Epoch: 6  [58880/60000 (98%)]\tLoss:  0.129756\n",
      "Train Epoch: 6  [59520/60000 (99%)]\tLoss:  0.120927\n",
      "\n",
      "Test set: Avg. loss:  0.0591,Accuracy : 9814/10000 ( 98%)\n",
      "\n",
      "Train Epoch: 7  [0/60000 (0%)]\tLoss:  0.352256\n",
      "Train Epoch: 7  [640/60000 (1%)]\tLoss:  0.413177\n",
      "Train Epoch: 7  [1280/60000 (2%)]\tLoss:  0.131933\n",
      "Train Epoch: 7  [1920/60000 (3%)]\tLoss:  0.123277\n",
      "Train Epoch: 7  [2560/60000 (4%)]\tLoss:  0.142182\n",
      "Train Epoch: 7  [3200/60000 (5%)]\tLoss:  0.105563\n",
      "Train Epoch: 7  [3840/60000 (6%)]\tLoss:  0.185985\n",
      "Train Epoch: 7  [4480/60000 (7%)]\tLoss:  0.132965\n",
      "Train Epoch: 7  [5120/60000 (9%)]\tLoss:  0.245183\n",
      "Train Epoch: 7  [5760/60000 (10%)]\tLoss:  0.117235\n",
      "Train Epoch: 7  [6400/60000 (11%)]\tLoss:  0.153073\n",
      "Train Epoch: 7  [7040/60000 (12%)]\tLoss:  0.300510\n",
      "Train Epoch: 7  [7680/60000 (13%)]\tLoss:  0.255819\n",
      "Train Epoch: 7  [8320/60000 (14%)]\tLoss:  0.213955\n",
      "Train Epoch: 7  [8960/60000 (15%)]\tLoss:  0.136738\n",
      "Train Epoch: 7  [9600/60000 (16%)]\tLoss:  0.155809\n",
      "Train Epoch: 7  [10240/60000 (17%)]\tLoss:  0.309334\n",
      "Train Epoch: 7  [10880/60000 (18%)]\tLoss:  0.145718\n",
      "Train Epoch: 7  [11520/60000 (19%)]\tLoss:  0.094137\n",
      "Train Epoch: 7  [12160/60000 (20%)]\tLoss:  0.201109\n",
      "Train Epoch: 7  [12800/60000 (21%)]\tLoss:  0.310884\n",
      "Train Epoch: 7  [13440/60000 (22%)]\tLoss:  0.230359\n",
      "Train Epoch: 7  [14080/60000 (23%)]\tLoss:  0.510874\n",
      "Train Epoch: 7  [14720/60000 (25%)]\tLoss:  0.240128\n",
      "Train Epoch: 7  [15360/60000 (26%)]\tLoss:  0.075673\n",
      "Train Epoch: 7  [16000/60000 (27%)]\tLoss:  0.216766\n",
      "Train Epoch: 7  [16640/60000 (28%)]\tLoss:  0.130994\n",
      "Train Epoch: 7  [17280/60000 (29%)]\tLoss:  0.118911\n",
      "Train Epoch: 7  [17920/60000 (30%)]\tLoss:  0.152225\n",
      "Train Epoch: 7  [18560/60000 (31%)]\tLoss:  0.258297\n",
      "Train Epoch: 7  [19200/60000 (32%)]\tLoss:  0.354352\n",
      "Train Epoch: 7  [19840/60000 (33%)]\tLoss:  0.151452\n",
      "Train Epoch: 7  [20480/60000 (34%)]\tLoss:  0.117496\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Epoch: 7  [21120/60000 (35%)]\tLoss:  0.169720\n",
      "Train Epoch: 7  [21760/60000 (36%)]\tLoss:  0.214193\n",
      "Train Epoch: 7  [22400/60000 (37%)]\tLoss:  0.070040\n",
      "Train Epoch: 7  [23040/60000 (38%)]\tLoss:  0.289038\n",
      "Train Epoch: 7  [23680/60000 (39%)]\tLoss:  0.162029\n",
      "Train Epoch: 7  [24320/60000 (41%)]\tLoss:  0.092141\n",
      "Train Epoch: 7  [24960/60000 (42%)]\tLoss:  0.270013\n",
      "Train Epoch: 7  [25600/60000 (43%)]\tLoss:  0.209649\n",
      "Train Epoch: 7  [26240/60000 (44%)]\tLoss:  0.147319\n",
      "Train Epoch: 7  [26880/60000 (45%)]\tLoss:  0.284332\n",
      "Train Epoch: 7  [27520/60000 (46%)]\tLoss:  0.110566\n",
      "Train Epoch: 7  [28160/60000 (47%)]\tLoss:  0.198676\n",
      "Train Epoch: 7  [28800/60000 (48%)]\tLoss:  0.084035\n",
      "Train Epoch: 7  [29440/60000 (49%)]\tLoss:  0.095873\n",
      "Train Epoch: 7  [30080/60000 (50%)]\tLoss:  0.212610\n",
      "Train Epoch: 7  [30720/60000 (51%)]\tLoss:  0.124667\n",
      "Train Epoch: 7  [31360/60000 (52%)]\tLoss:  0.187009\n",
      "Train Epoch: 7  [32000/60000 (53%)]\tLoss:  0.088696\n",
      "Train Epoch: 7  [32640/60000 (54%)]\tLoss:  0.181776\n",
      "Train Epoch: 7  [33280/60000 (55%)]\tLoss:  0.429436\n",
      "Train Epoch: 7  [33920/60000 (57%)]\tLoss:  0.223754\n",
      "Train Epoch: 7  [34560/60000 (58%)]\tLoss:  0.122461\n",
      "Train Epoch: 7  [35200/60000 (59%)]\tLoss:  0.205678\n",
      "Train Epoch: 7  [35840/60000 (60%)]\tLoss:  0.262801\n",
      "Train Epoch: 7  [36480/60000 (61%)]\tLoss:  0.162403\n",
      "Train Epoch: 7  [37120/60000 (62%)]\tLoss:  0.153299\n",
      "Train Epoch: 7  [37760/60000 (63%)]\tLoss:  0.246134\n",
      "Train Epoch: 7  [38400/60000 (64%)]\tLoss:  0.271154\n",
      "Train Epoch: 7  [39040/60000 (65%)]\tLoss:  0.147025\n",
      "Train Epoch: 7  [39680/60000 (66%)]\tLoss:  0.136303\n",
      "Train Epoch: 7  [40320/60000 (67%)]\tLoss:  0.252510\n",
      "Train Epoch: 7  [40960/60000 (68%)]\tLoss:  0.088088\n",
      "Train Epoch: 7  [41600/60000 (69%)]\tLoss:  0.162750\n",
      "Train Epoch: 7  [42240/60000 (70%)]\tLoss:  0.167709\n",
      "Train Epoch: 7  [42880/60000 (71%)]\tLoss:  0.206676\n",
      "Train Epoch: 7  [43520/60000 (72%)]\tLoss:  0.276663\n",
      "Train Epoch: 7  [44160/60000 (74%)]\tLoss:  0.191573\n",
      "Train Epoch: 7  [44800/60000 (75%)]\tLoss:  0.301954\n",
      "Train Epoch: 7  [45440/60000 (76%)]\tLoss:  0.127109\n",
      "Train Epoch: 7  [46080/60000 (77%)]\tLoss:  0.092606\n",
      "Train Epoch: 7  [46720/60000 (78%)]\tLoss:  0.132878\n",
      "Train Epoch: 7  [47360/60000 (79%)]\tLoss:  0.071353\n",
      "Train Epoch: 7  [48000/60000 (80%)]\tLoss:  0.167834\n",
      "Train Epoch: 7  [48640/60000 (81%)]\tLoss:  0.115010\n",
      "Train Epoch: 7  [49280/60000 (82%)]\tLoss:  0.188060\n",
      "Train Epoch: 7  [49920/60000 (83%)]\tLoss:  0.290082\n",
      "Train Epoch: 7  [50560/60000 (84%)]\tLoss:  0.131148\n",
      "Train Epoch: 7  [51200/60000 (85%)]\tLoss:  0.069670\n",
      "Train Epoch: 7  [51840/60000 (86%)]\tLoss:  0.203149\n",
      "Train Epoch: 7  [52480/60000 (87%)]\tLoss:  0.226299\n",
      "Train Epoch: 7  [53120/60000 (88%)]\tLoss:  0.189618\n",
      "Train Epoch: 7  [53760/60000 (90%)]\tLoss:  0.379590\n",
      "Train Epoch: 7  [54400/60000 (91%)]\tLoss:  0.508398\n",
      "Train Epoch: 7  [55040/60000 (92%)]\tLoss:  0.145556\n",
      "Train Epoch: 7  [55680/60000 (93%)]\tLoss:  0.244531\n",
      "Train Epoch: 7  [56320/60000 (94%)]\tLoss:  0.171758\n",
      "Train Epoch: 7  [56960/60000 (95%)]\tLoss:  0.137094\n",
      "Train Epoch: 7  [57600/60000 (96%)]\tLoss:  0.140302\n",
      "Train Epoch: 7  [58240/60000 (97%)]\tLoss:  0.248949\n",
      "Train Epoch: 7  [58880/60000 (98%)]\tLoss:  0.100074\n",
      "Train Epoch: 7  [59520/60000 (99%)]\tLoss:  0.633801\n",
      "\n",
      "Test set: Avg. loss:  0.0552,Accuracy : 9825/10000 ( 98%)\n",
      "\n",
      "Train Epoch: 8  [0/60000 (0%)]\tLoss:  0.260455\n",
      "Train Epoch: 8  [640/60000 (1%)]\tLoss:  0.099850\n",
      "Train Epoch: 8  [1280/60000 (2%)]\tLoss:  0.169297\n",
      "Train Epoch: 8  [1920/60000 (3%)]\tLoss:  0.237340\n",
      "Train Epoch: 8  [2560/60000 (4%)]\tLoss:  0.261205\n",
      "Train Epoch: 8  [3200/60000 (5%)]\tLoss:  0.182695\n",
      "Train Epoch: 8  [3840/60000 (6%)]\tLoss:  0.428680\n",
      "Train Epoch: 8  [4480/60000 (7%)]\tLoss:  0.208861\n",
      "Train Epoch: 8  [5120/60000 (9%)]\tLoss:  0.185955\n",
      "Train Epoch: 8  [5760/60000 (10%)]\tLoss:  0.145893\n",
      "Train Epoch: 8  [6400/60000 (11%)]\tLoss:  0.112901\n",
      "Train Epoch: 8  [7040/60000 (12%)]\tLoss:  0.112021\n",
      "Train Epoch: 8  [7680/60000 (13%)]\tLoss:  0.203355\n",
      "Train Epoch: 8  [8320/60000 (14%)]\tLoss:  0.203650\n",
      "Train Epoch: 8  [8960/60000 (15%)]\tLoss:  0.147734\n",
      "Train Epoch: 8  [9600/60000 (16%)]\tLoss:  0.141188\n",
      "Train Epoch: 8  [10240/60000 (17%)]\tLoss:  0.114724\n",
      "Train Epoch: 8  [10880/60000 (18%)]\tLoss:  0.292721\n",
      "Train Epoch: 8  [11520/60000 (19%)]\tLoss:  0.095848\n",
      "Train Epoch: 8  [12160/60000 (20%)]\tLoss:  0.086650\n",
      "Train Epoch: 8  [12800/60000 (21%)]\tLoss:  0.384625\n",
      "Train Epoch: 8  [13440/60000 (22%)]\tLoss:  0.226934\n",
      "Train Epoch: 8  [14080/60000 (23%)]\tLoss:  0.171155\n",
      "Train Epoch: 8  [14720/60000 (25%)]\tLoss:  0.196405\n",
      "Train Epoch: 8  [15360/60000 (26%)]\tLoss:  0.112171\n",
      "Train Epoch: 8  [16000/60000 (27%)]\tLoss:  0.172457\n",
      "Train Epoch: 8  [16640/60000 (28%)]\tLoss:  0.133694\n",
      "Train Epoch: 8  [17280/60000 (29%)]\tLoss:  0.157844\n",
      "Train Epoch: 8  [17920/60000 (30%)]\tLoss:  0.217536\n",
      "Train Epoch: 8  [18560/60000 (31%)]\tLoss:  0.229591\n",
      "Train Epoch: 8  [19200/60000 (32%)]\tLoss:  0.188954\n",
      "Train Epoch: 8  [19840/60000 (33%)]\tLoss:  0.284845\n",
      "Train Epoch: 8  [20480/60000 (34%)]\tLoss:  0.195248\n",
      "Train Epoch: 8  [21120/60000 (35%)]\tLoss:  0.097718\n",
      "Train Epoch: 8  [21760/60000 (36%)]\tLoss:  0.149732\n",
      "Train Epoch: 8  [22400/60000 (37%)]\tLoss:  0.232634\n",
      "Train Epoch: 8  [23040/60000 (38%)]\tLoss:  0.113034\n",
      "Train Epoch: 8  [23680/60000 (39%)]\tLoss:  0.183632\n",
      "Train Epoch: 8  [24320/60000 (41%)]\tLoss:  0.082862\n",
      "Train Epoch: 8  [24960/60000 (42%)]\tLoss:  0.165750\n",
      "Train Epoch: 8  [25600/60000 (43%)]\tLoss:  0.353990\n",
      "Train Epoch: 8  [26240/60000 (44%)]\tLoss:  0.149209\n",
      "Train Epoch: 8  [26880/60000 (45%)]\tLoss:  0.372221\n",
      "Train Epoch: 8  [27520/60000 (46%)]\tLoss:  0.359266\n",
      "Train Epoch: 8  [28160/60000 (47%)]\tLoss:  0.276181\n",
      "Train Epoch: 8  [28800/60000 (48%)]\tLoss:  0.211050\n",
      "Train Epoch: 8  [29440/60000 (49%)]\tLoss:  0.316075\n",
      "Train Epoch: 8  [30080/60000 (50%)]\tLoss:  0.300161\n",
      "Train Epoch: 8  [30720/60000 (51%)]\tLoss:  0.189413\n",
      "Train Epoch: 8  [31360/60000 (52%)]\tLoss:  0.092704\n",
      "Train Epoch: 8  [32000/60000 (53%)]\tLoss:  0.219638\n",
      "Train Epoch: 8  [32640/60000 (54%)]\tLoss:  0.111063\n",
      "Train Epoch: 8  [33280/60000 (55%)]\tLoss:  0.479679\n",
      "Train Epoch: 8  [33920/60000 (57%)]\tLoss:  0.161847\n",
      "Train Epoch: 8  [34560/60000 (58%)]\tLoss:  0.217932\n",
      "Train Epoch: 8  [35200/60000 (59%)]\tLoss:  0.493555\n",
      "Train Epoch: 8  [35840/60000 (60%)]\tLoss:  0.375685\n",
      "Train Epoch: 8  [36480/60000 (61%)]\tLoss:  0.148301\n",
      "Train Epoch: 8  [37120/60000 (62%)]\tLoss:  0.226575\n",
      "Train Epoch: 8  [37760/60000 (63%)]\tLoss:  0.180696\n",
      "Train Epoch: 8  [38400/60000 (64%)]\tLoss:  0.048196\n",
      "Train Epoch: 8  [39040/60000 (65%)]\tLoss:  0.102148\n",
      "Train Epoch: 8  [39680/60000 (66%)]\tLoss:  0.128829\n",
      "Train Epoch: 8  [40320/60000 (67%)]\tLoss:  0.424460\n",
      "Train Epoch: 8  [40960/60000 (68%)]\tLoss:  0.198686\n",
      "Train Epoch: 8  [41600/60000 (69%)]\tLoss:  0.172085\n",
      "Train Epoch: 8  [42240/60000 (70%)]\tLoss:  0.167915\n",
      "Train Epoch: 8  [42880/60000 (71%)]\tLoss:  0.066024\n",
      "Train Epoch: 8  [43520/60000 (72%)]\tLoss:  0.151978\n",
      "Train Epoch: 8  [44160/60000 (74%)]\tLoss:  0.078381\n",
      "Train Epoch: 8  [44800/60000 (75%)]\tLoss:  0.069271\n",
      "Train Epoch: 8  [45440/60000 (76%)]\tLoss:  0.108605\n",
      "Train Epoch: 8  [46080/60000 (77%)]\tLoss:  0.096074\n",
      "Train Epoch: 8  [46720/60000 (78%)]\tLoss:  0.054739\n",
      "Train Epoch: 8  [47360/60000 (79%)]\tLoss:  0.160945\n",
      "Train Epoch: 8  [48000/60000 (80%)]\tLoss:  0.108096\n",
      "Train Epoch: 8  [48640/60000 (81%)]\tLoss:  0.211966\n",
      "Train Epoch: 8  [49280/60000 (82%)]\tLoss:  0.203368\n",
      "Train Epoch: 8  [49920/60000 (83%)]\tLoss:  0.131659\n",
      "Train Epoch: 8  [50560/60000 (84%)]\tLoss:  0.189862\n",
      "Train Epoch: 8  [51200/60000 (85%)]\tLoss:  0.124280\n",
      "Train Epoch: 8  [51840/60000 (86%)]\tLoss:  0.211908\n",
      "Train Epoch: 8  [52480/60000 (87%)]\tLoss:  0.071781\n",
      "Train Epoch: 8  [53120/60000 (88%)]\tLoss:  0.175931\n",
      "Train Epoch: 8  [53760/60000 (90%)]\tLoss:  0.096943\n",
      "Train Epoch: 8  [54400/60000 (91%)]\tLoss:  0.154736\n",
      "Train Epoch: 8  [55040/60000 (92%)]\tLoss:  0.305924\n",
      "Train Epoch: 8  [55680/60000 (93%)]\tLoss:  0.099815\n",
      "Train Epoch: 8  [56320/60000 (94%)]\tLoss:  0.195851\n",
      "Train Epoch: 8  [56960/60000 (95%)]\tLoss:  0.138613\n",
      "Train Epoch: 8  [57600/60000 (96%)]\tLoss:  0.361639\n",
      "Train Epoch: 8  [58240/60000 (97%)]\tLoss:  0.420401\n",
      "Train Epoch: 8  [58880/60000 (98%)]\tLoss:  0.126014\n",
      "Train Epoch: 8  [59520/60000 (99%)]\tLoss:  0.184413\n",
      "\n",
      "Test set: Avg. loss:  0.0516,Accuracy : 9853/10000 ( 99%)\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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OKlmzZr4+++/PZafPXsWNWvWtKVQRZGSafI3aFLPZMOgiYiIyH6Wg6aDBw8iV+csfvnyZfz111+2FKoo8tYQ3EybJgZNREREgWV6yIHFixc7b//www9ISEhw3s/NzcWKFStQo0YNe0tXhOQ306Se7JdBExERkf1MB019+vQBADgcDtx///1uj0VFRaF69eqYMmWKrYUrSpSgKSvL8zGrQZO6fRMRERHZw3TQlPe/OqIaNWpg06ZNKF++fMAKVRQpQdPy5Z6PmameUwdN6qo6IiIisoflEcHT09MDUY4iT+k9p8dqpolBExERkf0sB00AcP78eaxevRqHDx/GFfXZGsCwYcNsKVhRc+mS8WN6QdPs2cA997juM2giIiIKLMtB07Zt23DzzTfjwoULOH/+PMqWLYvTp08jLi4OFStWZNDkp717jR/TC5r692fQREREVJAsDzkwcuRI9OzZE//88w+KFy+OjRs34tChQ2jZsiXefPPNQJSxSDh82PgxtmkiIiIKPstBU1paGkaPHo2IiAhERkbi8uXLqFq1Kl5//XU899xzgShjkdC5s/FjVts0LV0KdO9uffoVIiIiMmY5aIqKikLE/2aVrVixIg7/L0WSkJCAI0eO2Fu6IuSLL4B779V/zGrQBADLlgHr1+e/XERERCRZDpqaN2+OTZs2AQA6deqEcePG4T//+Q9GjBiBRo0a2V7AoqJyZeDFF133BwwAOnaUt/0JmoiIiMheloOmV155BcnJyQCAl19+GWXKlMFjjz2GU6dO4eOPP7a9gEVJiRKu23XqAE2ayNtW2zQpoqLsKRcRERH50XuuVatWztsVK1bE0qVLbS1QUaYOmnJzgchI121fjIKm7GzghReA228Hrr3WnnISEREVRZYzTRQ4xYu7bl+9ai1o0usxFxkJvPIK8M47wHXX2VNGIiKiospypql58+Zw6MwI63A4EBsbi1q1amHgwIG44YYbbClgURKhCmFzclxBk7/Vc3l53sd/MvL330CZMu7lISIiKuosnxZ79OiBAwcOoESJErjhhhtwww03oGTJkti/fz9at26N48ePIzU1Fd98800gyltkXL3qClq8ZZp27ADefhu4eNHzsdxcoJjFsHjzZqB8eeC226w9j4iIKNxZzjSdPn0ao0ePxtixY92Wv/TSSzh06BCWLVuG8ePHY9KkSejdu7dt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UCQnJyM2NhYpKSmYPHmy4bZWrVqFNm3aoESJEihdujQ6duyIQ4cOOR//5ptv0KJFC8TGxqJmzZqYOHGi87vma98Cru/F559/jurVqyMhIQF33XUXzp075/U9EhUIy1P8EoWJTp06ifj4eDFhwgSxd+9e8e9//1s4HA7nrPTp6ekCgNi2bZvzOf/8848AIFauXCmEkLNvAxDt2rUTP//8s9i6dauoVauW6NSpk+jWrZvYunWrWLNmjShXrpx49dVX3V67ZMmSYvjw4WL37t3iiy++EHFxceLjjz92rjNo0CDRoUMHsWbNGvHnn3+KN954Q8TExIi9e/cKIYSYOXOmiIqKEh06dBDr1q0Tu3fvFufPn/d4n3/99ZeIi4sTQ4YMEbt27RILFy4U5cuXF+PHjxdCCHH27Fnx4osviipVqojjx4+LkydPemzj8uXLYurUqSI+Pl4cP35cHD9+XJw7d04IIURKSoqIj48Xb775pvjzzz+ds5xPmjRJrFu3TqSnp4vFixeLxMRE8dprrzm3OX78eNG0aVPn/fvvv1/Ex8eLwYMHi127don//ve/HvskJSVFvP322877AESVKlXE7Nmzxb59+8SwYcNEyZIlxd9//y2EEOLAgQMiKipKPPnkk2L37t3iyy+/FJUrVxYAxD///GP01RCpqamiZ8+eYtOmTWLv3r1i9OjRoly5cs7tfvvttyIqKkps2rRJZGVliZo1a4qRI0c6n5+WliY+/PBDsWPHDrF3717xwgsviNjYWHHo0CG391K2bFnx4Ycfir1794rHHntMxMfHix49eoh58+aJPXv2iD59+oj69euLvLw8t8+8VatWYv369WLz5s2iTZs2okOHDob79YsvvhDJycni66+/FgcOHBBff/21KFu2rJg1a5YQQog33nhDVK1aVaxZs0YcPHhQrF27VsyePVt3v1y9elUkJCSIJ598Uvz555/ijz/+ELNmzXK+rzVr1oj4+Hgxa9YssX//frFs2TJRvXp1MWHCBNP7dvz48aJkyZLi1ltvFTt27BBr1qwRSUlJ4rnnnjP8vIgKCoMmKrI6deokrr32WrdlrVu3Fs8884wQwlrQ9OOPPzrXmTx5sgAg9u/f71z26KOPiu7du7u9tvpkKIQQzzzzjKhfv74QQohDhw6JyMhIcfToUbfydenSRYwZM0YIIU+gAERaWprX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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 手动添加计数器进行训练\n",
    "for i in  range(4,9):\n",
    "    test_counter.append(i*len(train_loader.dataset))\n",
    "    train(i)\n",
    "    test()\n",
    "\n",
    "#使用图像检查训练结果\n",
    "fig = plt.figure()\n",
    "plt.plot(train_counter, train_losses, color='blue')\n",
    "plt.scatter(test_counter, test_losses, color='red')\n",
    "plt.legend(['Train Loss', 'Test Loss'], loc='upper right')\n",
    "plt.xlabel('number of training examples seen')\n",
    "plt.ylabel('negative log likelihood loss')\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "torch-gpu-jupyter",
   "language": "python",
   "name": "torch-gpu-jupyter"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.19"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
